htaccess RewriteRule冲突:RewriteCond是如何工作的?

时间:2013-07-05 06:42:06

标签: apache .htaccess mod-rewrite

昨天我一直在努力和失败。

我需要重写所有网址,将它们作为参数传递给我的前端控制器。

但我也需要将所有以“admin”开头的网址重写并作为参数传递给我的管理控制器......

这是我试过的代码。我知道它不能正常工作,但我无法弄清楚如何做到这一点......

RewriteRule ^(.*)$ /index.php?uri=$1 [L]
RewriteCond $1 !^/admin
RewriteRule ^admin/(.*)$ /admin/index.php?uri=$1 [L]

如果有人可以帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:1)

将RewriteCond放在RewriteRule之前,或者将管理员重写为其他所有内容。

就目前而言,访问/ admin的访问者与第一个重写规则相匹配,然后就是它。

你的RewriteCond实际上是因为它的位置而适用于第二个RewriteRule。

我还会将$ 1更改为%{REQUEST_URI}并将QSA添加到标志中,以便正确传递查询字符串。

RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^(.*)$ /index.php?uri=$1 [L,QSA]
RewriteRule ^admin/(.*)$ /admin/index.php?uri=$1 [L,QSA]

这应该有用。