我正在设置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的第一个参数。
答案 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不是其中之一,则匹配条件是然后传递给了重写者。