这个RewriteCond的$ 1参数有什么作用?

时间:2012-11-13 21:40:41

标签: apache codeigniter mod-rewrite

我正在设置Apache重写规则以整理我的CodeIgniter URL。

This question(以及我在这个地方发现的很多论坛帖子等)记录了以下规则的使用(或非常类似的事情):

RewriteEngine on
RewriteCond $1 !^(index\.php|phpinfo\.php|images|robots\.txt|sitemap\.xml\.gz|sitemap\.xml|assets)
RewriteRule ^(.*)$ /index.php/$1 [L]

我知道RewriteRule后的$ 1引用来自(。*)的捕获字符串,但第一个$ 1(RewriteCond之后的代码)代表什么?我见过很多例子使用%{REQUEST_URI}之类的东西作为RewriteCond的第一个参数。

2 个答案:

答案 0 :(得分:22)

$1基本上是从字符串的开头和结尾捕获的所有内容。换句话说,$1 = (.*)

在您的重写中,^表示字符串的开头,(.*)表示匹配任何内容,$表示字符串的结尾。所以,基本上,它是说从字符串的开头到结尾抓取所有内容并将该值分配给$ 1.

因此,如果我输入www.example.com/tacos-are-good,那么$1 = "tacos-are-good"。所以你的结束重写实际上是www.example.com/index.php/tacos-are-good

这是ModRewrite的备忘单,可能会有所帮助: http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet/

答案 1 :(得分:7)

$ 1表示来自其后面的正则表达式中第一组括号的匹配。 (2美元将匹配第二组括号 - 如果给出)

例如,正则表达式匹配任何非“index.php”或“phpinfo.php”等的内容。因此,如果请求的url不是其中之一,则匹配条件是然后传递给了重写者。