理解旧的.htaccess文件



谁能给我解释一下这个rewritecsecond ?尤其是末尾的HTTP/部分:

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://www.XXXXXXXXXXXXXXXX.com/ [R=301,L] 

我已经在这里找到了对前半部分条件的很好的解释,但我仍然对"/index.php HTTP/"部分。

和再次:为什么"HTTP/">

?

我已经在这里找到了对前半部分条件的很好的解释,但我仍然对"/index.php HTTP/"部分。

那个解释漏掉了一些细节。THE_REQUEST服务器变量包含HTTP请求头的第一行。并且将包含一个形式为:

的字符串。
GET /index.php HTTP/1.1
因此,它包含3条信息,用空格分隔。您有请求方法(GET、POST、OPTIONS、HEAD等)、URI和使用的协议/版本(在本例中为HTTP v1.1)。

对于这个特定的正则表达式,您不一定需要包括最终的HTTP/部分,只需要包括空间。然而,通过包括http/,它使正则表达式更容易阅读,更不容易出错。以空格(你看不见)结束并不是最佳实践。

下面是等价的:

RewriteCond %{THE_REQUEST} s/index.phps

这使用了空格的简写字符类(s),而不是转义文字空格(因此您可以"看到">空间)。

或者,用双引号括住参数:

RewriteCond %{THE_REQUEST} " /index.php "

(虽然,乍一看这几乎像是一个错误)

首先包含这个条件(RewriteCond指令)的原因是,如果您稍后将请求重写到index.php(前端控制器模式),则可以防止重写循环。当THE_REQUEST被Apache内部重写时,它不会在整个请求中更新(不像其他变量)。

相关内容

  • 没有找到相关文章

最新更新