旧.htaccess文件RewriteCond规则末尾HTTP/部分的含义解析
mod_rewrite 规则逐段解释
首先给出完整规则片段:
RewriteEngine on RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.XXXXXXXXXXXXXXXX.com/ [R=301,L]
规则核心作用
这套规则用于将直接访问index.php的请求301永久重定向到站点根路径,避免首页出现/和/index.php两个可访问地址导致的SEO权重分散问题。
你关注的/index.php\ HTTP/片段及HTTP/的作用说明
首先明确%{THE_REQUEST}这个Apache内置变量的含义:它存储的是客户端发起的原始未修改的HTTP请求行,标准格式为:
[请求方法] [请求资源路径] [HTTP版本]
比如你通过浏览器访问站点的index.php时,服务端拿到的原始请求行类似:GET /index.php HTTP/1.1、POST /index.php HTTP/2等。
现在拆解对应的正则匹配逻辑:
- 开头
^[A-Z]{3,9}\:匹配请求行开头的请求方法(GET/POST/PUT/DELETE等均为3~9位大写字母,后面紧跟空格) - 中间
/index\.php\:匹配请求的资源路径就是/index.php,后面紧跟空格,其中反斜杠是转义符,用来转义特殊字符.和空格 - 末尾
HTTP/:匹配请求行里HTTP版本字段的固定前缀,无论HTTP版本是1.0、1.1、2还是3,版本字段都是以HTTP/开头
加HTTP/的核心作用
是做精准匹配校验,避免规则被误触发:如果没有加这个后缀,那么类似/index.php/article/1、/index.phpabc这类带index.php前缀的路径也会被正则匹配到,加了HTTP/之后,只有请求的资源路径完全等于/index.php,后面直接跟HTTP版本前缀时,规则才会生效,不会误伤其他路径。
后续RewriteRule说明
当RewriteCond匹配通过后,这条规则会将请求301重定向到站点根域名,参数L表示命中这条规则后不再执行后续的重写规则。
内容的提问来源于stack exchange,提问作者Gnarp
相关产品推荐
相关产品推荐

