这个.htaccess文件中的第2行和第3行实现了什么?

时间:2012-03-13 16:15:08

标签: .htaccess mod-rewrite

此配置用于将URL重写为子目录以进行版本控制,同时还将整个查询字符串推送到名为“request”的单个GET变量中,以便从URL中删除问号。

RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteRule (www/.*)$ 2.0/public/$1 [L]
RewriteRule ^(.*+)$ 2.0/public/index.php?request=$1 [L]
DirectoryIndex index.php

我把它拼凑在一起并且通过一些奇迹它适用于我的目的,但我仍然不能100%确定原因。我需要所有这些线才能正常工作。具体来说,我需要第2行和第3行的帮助。

我知道[L]标志停止处理当前请求的重写,然后发出新请求,需要根据规则再次处理(这可能解释了第2行)。第3行的目的是什么?

2 个答案:

答案 0 :(得分:0)

让我们先给你的行编号,因为你不清楚你所说的是什么:

1. RewriteEngine On
2. RewriteCond %{ENV:REDIRECT_STATUS} 200
3. RewriteRule .* - [L]
4. RewriteRule (www/.*)$ 2.0/public/$1 [L]
5. RewriteRule ^(.*+)$ 2.0/public/index.php?request=$1 [L]
6. DirectoryIndex index.php

现在,让我们试着解释每一行的含义:

  1. 启用网址重写功能。
  2. 如果找到了所请求的文件
  3. ...然后返回并停止。
  4. 否则,如果URL以“www /”开头,则重定向到子文件夹“2.0 / public /”并附加整个请求字符串。
  5. 否则,如果URL在域名后面至少有1个字符,则重定向到“2.0 / public / index.php?request =”并将整个请求字符串附加为参数。
  6. 指定默认处理程序。

答案 1 :(得分:0)

第2行首先使用ENV:REDIRECT_STATUS检查其重定向请求是否为重定向请求,然后立即结束第3行的处理。

您可能需要检查Rewrite Cheat sheet以了解mod_rewrite的其他功能。