我希望将所有内容重定向到index.php,所以我认为这应该有效:
RewriteEngine on
RewriteRule ^(.*)$ /index.php?url=$1 [L]
..但事实并非如此。这个非常相似的RewriteRule确实有效:
RewriteEngine on
RewriteRule matches/(.*) /index.php?url=$1 [L]
我后来发现要让你需要的第一个工作:
RewriteCond %{REQUEST_FILENAME} !-f
有人可以解释为什么在前一个例子中需要最后一个RewriteCond而不是后者吗?
答案 0 :(得分:3)
因为第一条规则将重写已经重写的网址。
RewriteRule Last [L] flag not working?
例如:
/hello/pink-kitten
/index.php?url=hello/pink-kitten
/index.php?url=index.php
/index.php?url=index.php
为什么规则在添加条件时有效?因为条件明确表示 - 只有在请求的网址不是文件时才重写。因此,在第二个周期中,由于/index.php
是一个文件,因此不会再次重写URL,因此不再有周期。
为什么第二条规则就是这样?因为它已内置条件 - 其中应包含matches/
,并且您可以看到重写的网址/index.php?url=
没有matches/
部分。