.htaccess文件RewriteRule语法规则小白入门_语法小白常识

.htaccess文件是运行Apache Web Server的Web服务器的配置文件,对配置和重定向Apache Web Server文件系统很有用。请记住.htaccess文件将采用隐藏格式。没有人可以通过URL直接看到它。.htaccess文件有很多用途。在这里,我将讨论.htaccess文件RewriteRule语法规则。RewriteRule语法规

.htaccess文件RewriteRule语法规则小白入门

.htaccess文件是运行Apache Web Server的Web服务器的配置文件,对配置和重定向Apache Web Server文件系统很有用。请记住.htaccess文件将采用隐藏格式。没有人可以通过URL直接看到它。

.htaccess文件RewriteRule语法规则小白入门_语法小白常识

.htaccess文件有很多用途。在这里,我将讨论.htaccess文件RewriteRule语法规则。

RewriteRule语法规则

    # —— 位于行首时表示注释。     [F] —— Forbidden(禁止): 命令服务器返回 403 Forbidden错误给用户浏览器     [L] —— Last rule(最后一条规则): 告诉服务器在本条规则执行完后停止重写URL。立即停止重写操作,并不再应用其他重写规则。它对应于Perl中的last命令或C语言中的break命令。这个标记用于阻止当前已被重写的URL被后继规则再次重写。例如,使用它可以重写根路径的URL(“/”)为实际存在的URL(比如:”/e/www/”)。     [N] —— Next(下一条规则): 告诉服务器继续重写,指导所有重写指令都执行过。重新执行重写操作(从第一个规则重新开始)。此时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理过的URL。它对应于Perl中的next命令或C语言中的continue命令。此标记可以重新开始重写操作(立即回到循环的开头)。但是要小心,不要制造死循环!     [G] —— Gone(丢失): 命令服务器返回410 GONE(no longer exists)错误消息     [P] —— Proxy(代理): 告诉服务器通过mod_proxy模块处理用户请求     [C] —— Chain(捆绑): 告诉服务器将当前的规则和前面的规则进行捆绑    “redirect|R [=code]“(强制重定向)    [R] —— Redirect(重定向): 命令服务器发出重定向消息,以便用户浏览器发出rewritten/modified(重写/修改)URL的请求。若Substitution以http://thishost[:thisport]/(使新的URL成为一个URI)开头,可以强制性执行一个外部重定向。如果没有指定code,则产生一个HTTP响应码302(临时性移动)。如果需要使用在300-400范围内的其他响应代码,只需在此指定即可(或使用下列符号名称之一:temp(默认), permanent,seeother)。使用它可以把规范化的URL反馈给客户端,如将”/~”重写为”/u/”,或始终对/u/user加上斜杠,等等。注意:在使用这个标记时,必须确保该替换字段是一个有效的URL。否则,它会指向一个无效的位置!并且要记住,此标记本身只是对URL加上http://thishost[:thisport]/前缀,重写操作仍然会继续进行。通常,你还会希望停止重写操作而立即重定向,那么就还需要使用”L’标记。     [NC] —— No Case(不区分大小写): 对客户端请求的URL不区分大小写。它使Pattern忽略大小写,也就是在Pattern与当前URL匹配时,”A-Z”和”a-z”没有区别     [PT] —— Pass Through(放行): 让mod_rewrite模块将重写的URL传回给Apache做进一步处理     [OR] —— Or(逻辑或): 用逻辑“或”将两个表达式连接在一起,如果结果为“真”,则会应用后继的相关规则     [NE] —— No Escape(禁用转义): 命令服务器在输出时禁用转义字符标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下,特殊字符(“%”, “$”,“;”等)会被转义为等值的十六进制编码(“%25′, “%24′,“%3B”等)。此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,比如:RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 可以使”/foo/zed转向到一个安全的请求”/bar?arg=P1=zed”。     [NS] —— No Subrequest(禁用子请求): 如果存在内部子请求,则跳过当前命令。在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。比如,在mod_include试图搜索目录默认文件(index.xxx)时,Apache会在内部产生子请求。对于子请求,重写规则不一定有用,而且如果整个规则集都起作用,它甚至可能会引发错误。所以,可以用这个标记来排除某些规则。使用原则:如果你为URL添加了CGI脚本前缀,以强制它们由CGI脚本处理,但对子请求处理的出错率(或者资源开销)很高,在这种情况下,可以使用这个标记。     [QSA] —— Append Query String(追加查询字符串): 命令服务器在URL末尾追加查询字符串,以维护GET的URL参数.     [S=x] —— Skip(跳过): 如果满足某指定的条件,则跳过后面第x调规则     [E=variable:value] —— Environmental Variable(环境变量): 命令服务器将值value赋给变量variable     [T=MIME-type] —— Mime Type(MIME类型): 声明目标资源所属的MIME类型。强制目标文件的MIME类型为MIME-type,可以用来基于某些特定条件强制设置内容类型。比如,下面的指令可以让.PHP文件在以.phps扩展名调用的情况下由mod_php按照PHP源代码的MIME类型(application/x-httpd-php-source)显示:    RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]     [] —— 匹配一个字符集合,例如[xyz]可以匹配x, y或者z     []+ —— 例如[xyz]+会以任何顺序、次数匹配x,y,z的出现     [^] —— 字符^表示字符集的补集。[^xyz]将匹配没有x,y或者z的字符串     [a-z] —— 连字符(-)表示匹配从字母a到字母z的所有字符串     a{n} —— 指定字母a出现的次数为n次,满足该条件时匹配。例如x{3}仅与xxx匹配     a{n,} —— 指定字母a出现的次数至少为n次,例如x{3,}可以与xxx或者xxxx等匹配     a{n,m} —— 指定a出现的次数至少为n到m次。     () —— 用于将正则表达式分组,满足第一组正则表达式的字符串会被存储在变量$1中,以此类推。如果括号中的不是正则表达式,例如(perishable)?press 将能够匹配有或者没有perishable前缀的press     ^ —— 位于行首。注意:和中括号中的[^]意义不同。     $ —— 位于行末     ? —— 例如 monzas? 会匹配 monza 或者 monzas,而 mon(za)? 会匹配 mon 或者 monza。又如 x? 会匹配“空字符” 或者 一个x     ! —— 逻辑非。例如“!string” 将会匹配除了“string”以外的所有字符串     . —— 表示任意字符串     – —— 命令Apache“不要”重写URL,例如“xxx.domain.com.* – [F]”     + —— 匹配至少一个任意字符,例如G+匹配以G开头、并且后面至少有一个字符的字符串     * —— 匹配零个或多个字符,例如“.*”匹配任意字符串     | —— 逻辑“或”,与[OR]不同的是,它只匹配字符串,例如(x|y)匹配x或者y     \ —— 转义字符。可以转义左括号( 尖字符^ 美元符号$ 感叹号! 点. 星号* 管道符号| 右括号) 等     \. —— 转义为点字符(点字符在正则表达式中可以匹配任意字符)     /* —— 零个或多个正斜杠     .* —— 零个或多个任意字符(即,匹配任意字符串,包括空字符)     ^$ —— 匹配“空字符”、“空行”     ^.*$ —— 匹配任意字符串(仅限一行)     [^/.] —— 匹配既非“正斜杠”也不是“点”的任意字符     [^/.]+ —— 匹配第一个字符既非“正斜杠”也不是“点”,后继字符可以是“正斜杠”或者“点”的字符串     http:// —— 匹配“http://”     ^domain.* —— 匹配以“domain”开始的字符串     ^domain\.com$ —— 仅匹配“domain.com”     -d —— 测试字符串是否是已存在的目录     -f —— 测试字符串是否是已存在的文件     -s —— 测试字符串所指文件是否有“非零”值

.htaccess文件需要注意的地方:  

1、找到配置文件httpd.conf,将override的值改成all。如下图:(如果不设置成all,apache将忽略.htaccess文件)

2、找到配置文件httpd.conf,加载指定的模块,如下图:(一般都是加载了指定模块,然后在配置.htaccess文件才有效)

以下是常用的.htaccess配置: 

#去掉网址的index.php字符串
RewriteEngine on
RewriteBase /
RewriteCond %{REGUEST_FILENAME} !-f
RewriteCond %{REGUEST_FILENAME} !-d
#设置public字符串不跳转是要访问资源文件
RewriteRule !^(index.php|public)  aaa/index.php [L] 
#去掉网址的index.php字符串

#GZIP压缩模块配置
<ifmodule mod_deflate.c>
    #启用对特定MIME类型内容的压缩
    SetOutputFilter DEFLATE
    #设置不要压缩的文件
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|exe|t?gz|zip|bz2|sit|rar|pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
    #设置要压缩的文件
    AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-httpd-php application/x-javascript 
</ifmodule>
#GZIP压缩模块配置

#文件缓存时间配置
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css)$">
    Header set Cache-Control "max-age=0" 
</FilesMatch>
#文件缓存时间配置
海计划公众号
(0)
上一篇 2020/03/26 23:34
下一篇 2020/03/26 23:34

您可能感兴趣的内容

  • ConditionerJS入门百科_一个基于状态自动决定加载或者卸载模块的库

    ConditionerJS入门百科 GitHub:https://github.com/rikschennink/conditioner/ 简介描述:一个基于状态自动决定加载或者卸…

    2020/03/07
  • Linux服务器安装node环境小白知识_服务器菜鸟攻略

    总结在Linux服务器上部署node环境1、下载node因使用的服务器不能直接连接外网,这里就从node官网下载之后再上传,也可以使用wget直接下载,下载版本 2、解压将node上传服务器后,解压到新建的node目录下tar -xf node-v10.15.3-linux-x64.tar.xz3、设置软连接设置nodeln -s /当前的node目录/no

    2020/03/22
  • cssreference.io菜鸟教程_可视化CSS样式表手册

    cssreference.io菜鸟教程 官方网址:https://cssreference.io/ 简介描述:可视化CSS样式表手册 Cscssreference.io是一个免费的…

    2020/03/11
  • PHP性能优化总结入门知识_性能菜鸟教程网

    【1】在循环中判断时,数值判断使用恒等要比等于高效。 【2】在数组中,数组下标是字母时一定要加上单引号或双引号。因为$row[‘id‘]的效率是$row[id]的7倍。 【3】不要使用“@”去屏蔽错误输出。用@屏蔽错误消息的做法非常低效。若你真的想抑制报错,可以通过设置error_reporting来控制,好比栗子中的,行前设置,行后取消即可。 【4】尽量不

    2020/03/29
  • Bug的处理流程零基础入门_bug菜鸟指南

    缺陷的定义软件没有实现产品的说明书所描述的功能软件实现了产品说明书描述不应有的功能软件执行了产品说明书没讲的操作软件没有实现产品说明书没讲但应该实现的功能从软件测试员的角度来看,软件难以理解、不易使用、运行缓慢,或者最终用户认为不对缺陷的等级致命:一招毙命的缺陷,使你的系统无法运行,有造成数据泄漏的安全性问题。严重:可以引起易于纠正的异常情况、可能引起易于修

    2020/03/31
  • js包装对象基础入门_对象攻略教程

    定义对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”。所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。var v1 = new Numb

    2020/04/03
  • Barba.js菜鸟指南_让网页之间流畅和平滑的过渡

    Barba.js菜鸟指南 官方网址:http://barbajs.org GitHub:https://github.com/luruke/barba.js 简介描述:让网页之间流…

    2020/03/06
  • 网页外链用了 target=基础入门blank,结果悲剧了_url使用帮助

    网页外链用了 target=基础入门blank,结果悲剧了 今天给大家分享一个 Web 知识点。如果你有过一段时间的 Web 开发经验,可能已经知道了。不过对于刚接触的新手来说,还…

    2020/03/20
  • Angular中实现文件转BASE64入门知识_base64指南教程

    这是一个so easy的问题,主要是记录一下angular 的模板变量的使用和组件中匿名方法 ,箭头方法使用的区别代码模板文件 <input type="file" style="display: none" (change)=

    2020/03/22
  • 什么是BFC布局——浅析BFC布局的概念以及作用使用教程_布局菜鸟知识

    BFC的定义:(Block formatting context)直译为”块级格式化上下文”。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。我们常说的文档流其实分为==定位流、浮动流和普通流==三种。而普通流其实就是指BFC中的FC。
    FC是formatti

    2020/04/03
  • PicGo使用帮助_用electron-vue构建的简单而漂亮的图片上传工具

    PicGo使用帮助 官方网址:https://molunerfinn.com/PicGo/ GitHub:https://github.com/Molunerfinn/PicGo …

    2020/03/07
  • 什么是javascript的私有方法?入门基础知识_方法入门指南

    私有方法是只有父类可以访问的方法和属性,他与静态方法一致,只是表现形式不一样。构造器中的var变量和参数都是私有方法。私有成员由构造函数生成。构造函数的普通变量和参数成为私有成员。function Container(param){this.member = param;var secret = 3;var that = this;}这个构造函数生成三个私有

    2020/03/22
  • CSS实现宽高等比自适应容器菜鸟指南_自适应入门教程

    在最近开发移动端页面,遇到这么一个情况:当页面宽度 100% 时,高度为宽度一半,并随手机宽度变化依然是一半。于是我们就需要实现一个宽度自适应,高度为宽度一半的容器。这里先以高度为宽度一半为例,也可以是其他任意比例。一、思考如何实现这个问题类似于:我们在移动端页面,上面有一张宽度 100% 的图片,如果我们没设置高度,则图片会根据原有尺寸,等比缩放。我们可以

    2020/03/26
  • Js中json对象与json字符串相互转换的几种方式教程视频_json小白帮助

    一、JSON对象转化为JSON字符串1.使用JSON.stringify()方法进行转换该方法不支持较老版本的IE浏览器,比如:ie8(兼容模式)、ie7、ie6。var jsonStr = JSON.stringify(jsonObj);
    alert(jsonStr);var jsonStr = jsonObj.toJSONString();
    alert(

    2020/03/23
  • pm2常用指令使用帮助_pm2菜鸟指南

    1、node守护进程比较1.)node守护进程比较nodemon:开发环境使用,修改后自动重启。 forever:管理多个站点,每个站点访问量不大,不需要监控。 pm2:网站访问量比较大,需要完整的监控界面。2.)pm2主要特性内建负载均衡(使用Node cluster 集群模块) 后台运行 0秒停机重载 开机自启动脚本 停止不稳定的进程(避免无限循环) 控

    2020/03/31
  • 理解Web路由零基础入门_路由小白知识

    1.什么是路由?在Web开发过程中,经常会遇到『路由』的概念。那么,到底什么是路由?简单来说,路由就是URL到函数的映射。2.router 和 route 的区别route就是一条路由,它将一个URL路径和一个函数进行映射,例如:/users -> getAllUsers()
    /users/count -> getUsersCount()

    2020/03/29