.htaccess规则来分隔页面类型

时间:2013-07-31 06:47:20

标签: .htaccess mod-rewrite

我在使用以下规则重写网址时遇到一些问题

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/之外的其他规则。

2 个答案:

答案 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

来自Apache documentation

'-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.