我正在设置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的第一个参数。
发布于 2012-11-14 05:48:12
$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/
发布于 2012-11-14 05:48:01
$1表示它后面的正则表达式中第一组括号中的匹配项。($2将匹配第二组括号-如果给定)
例如,正则表达式匹配不是"index.php“或"phpinfo.php”的任何内容,等等。因此,如果请求的url不是其中之一,则传递重写条件,然后将匹配的部分传递给重写规则。
https://stackoverflow.com/questions/13369285
复制相似问题