.htaccess文件RewriteRule语法规则

.htaccess文件RewriteRule语法规则.htaccess文件是运行ApacheWebServer的Web服务器的配置文件,对配置和重定向ApacheWebServer文件系统很有用。请记住.htaccess文件将采用隐藏格式。没有人可以通过URL直接看到它。.htaccess文件有很多用途。在这里,我将讨论.htaccess文件RewriteRule语法规则。RewriteRule语法规则#——位于行首时表示注释。[F]——Forbidden(禁止):命令服务器返回403Forb…

大家好,又见面了,我是你们的朋友全栈君。

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

转自:.htaccess文件RewriteRule语法规则

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146406.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」

    短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」“比特币又跳水了。”  “那还有回暖的机会吗?”  最近这段时间,相信因为数字货币价格集体跳水而感到恐慌的,不止是炒币的投机客,还有大量“矿工”。  在过去一年多时间里,区块链逐渐变为人人热议的亲民话题,“挖矿”也成为很多人热议的火爆职业。甚至有金融界、互联网公司金领不惜放弃高薪,转型成为比特币“矿工”。  在过去的大半年时间里,比特币等数字货币也经历过几次不同程度的震荡。在遭遇价格上的大起大落之…

  • vm安装ubuntu时一直没反应_虚拟机安装ubuntu系统要多久

    vm安装ubuntu时一直没反应_虚拟机安装ubuntu系统要多久这**加粗样式**里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学

  • C++ socket通信遇到的无法解析外部符号「建议收藏」

    C++ socket通信遇到的无法解析外部符号「建议收藏」转载:https://blog.csdn.net/u013617144/article/details/49046925bug:无法正常调用Socket通讯方法解决方案:头文件中加入#pragmacomment(lib,"WS2_32.lib")

  • GIT问题:fatal: Out of memory, malloc failed问题的解决[通俗易懂]

    执行gitconfig–globalpack.windowMemory1024m解决多数人抄袭这个,尝试过后没有效果 目录\.git\config[core]repositoryformatversion=0filemode=truebare=true[pack]   window=0 …

  • jQuery+CSS3文字跑马灯特效

    jQuery+CSS3文字跑马灯特效是一款将跑马灯背景制作为3D立方体效果,文字在上面移动时,就像是文字投影到墙壁上,在转角出会改变运动方向。效果展示 http://hovertree.co

    2021年12月27日
  • 访问香港最快的DNS(2019香港最快dns)

    如果你还不知道DNS是干什么的,不妨看看下面这段文字:[alert]DNS(DomainNameSystem,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号