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

Hig*_*lar 20 apache mod-rewrite codeigniter

我正在设置Apache重写规则来整理我的CodeIgniter URL.

这个问题(以及我在这个地方发现的很多论坛帖子等)记录了以下规则的使用(或者非常类似的东西):

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

我知道RewriteRule后的$ 1引用了从(.*)获取的字符串,但是第一个$ 1(RewriteCond之后的代码)代表什么?我见过的很多例子都使用%{REQUEST_URI}作为RewriteCond的第一个参数.

sbe*_*v01 23

$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的两个实例都指的是相同的值呢? (2认同)

swa*_*ins 9

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

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

  • `$1` 表示 RewriteRule 正则表达式中第一组括号的匹配,而不是 RewriteCond 正则表达式中的匹配。 (4认同)