我试图了解 Mod-rewrite 规则是如何工作的。
我现在有这个,第一条规则有效,第二条规则无效。这里的解决方案是什么?
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/\.]+)/?$ ?page=project&name=$1 [NC,L]
RewriteRule ^([^/\.]+)/?$ index.php?category=$1 [NC,L]
我试图了解 Mod-rewrite 规则是如何工作的。
我现在有这个,第一条规则有效,第二条规则无效。这里的解决方案是什么?
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/\.]+)/?$ ?page=project&name=$1 [NC,L]
RewriteRule ^([^/\.]+)/?$ index.php?category=$1 [NC,L]
您的第一条规则中有一个L
标志,这意味着“最后一条规则,停止重写并且不评估任何其他规则”。
由于两个 rewriteRules 中的正则表达式模式相同,第二条规则不起作用。所以规则 1 将首先执行跳过下面的其他类似规则。
为了避免这种混淆,您可以简单地更改第二条规则的路径名和模式。
RewriteRule ^path2/([^/.]+)/?$
这接受以下格式的路径名:
/path2/foo
改写
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/\.]+)/?$ ?page=project&name=$1 [NC,L]
RewriteRule ^path2/([^/\.]+)/?$ index.php?category=$1 [NC,L]