.htaccess文件RewriteRule语法规则

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

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

.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>
#文件缓存时间设置


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入

3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/3129

  • 发表于 2021-02-11 16:56
  • 阅读 ( 270 )
  • 分类:互联网

0 条评论

请先 登录 后评论
一条鱼
一条鱼

724 篇文章

你可能感兴趣的文章

相关问题