我在使用以下规则重写网址时遇到一些问题
RewriteEngine on
RewriteRule ^page/(.*)$ index.php?pag=cms&title=$1 [NC]
RewriteRule ^admin/(.*)$ admin/$1 [NC]
RewriteRule ^(.*)$ index.php?pag=$1 [NC,L]
我想要实现的是检查URL是否是cms页面并保留管理员URL。 如果我删除它的最后一个条件,但我没有cms页面的规则。
理想情况下,我希望每个页面只有一个规则(cms与否)但我无法弄清楚除了在URL中使用page/
之外的其他规则。
答案 0 :(得分:1)
Mod_rewrite将继续循环遍历所有规则,直到URI停止更改(或者达到其内部重定向限制,结果导致500错误)。您需要在最后一条规则中添加一些条件,以便它不会重写已经正确路由的URI:
RewriteRule ^page/(.*)$ index.php?pag=cms&title=$1 [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pag=$1 [NC,L]
此外,第二条规则除了直通之外什么都不做,所以你可以用
替换它RewriteRule ^admin/(.*)$ - [NC,L]
答案 1 :(得分:0)
您需要以下规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
'-d' (is directory)
Treats the TestString as a pathname and tests whether or not it exists, and is a directory.
'-f' (is regular file)
Treats the TestString as a pathname and tests whether or not it exists, and is a regular file.