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



我昨天一整天都在尝试,但都失败了。

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

但我也需要重写所有以"admin"开头的url,并将其作为参数传递给我的管理控制器。。。

这是我试过的代码。我知道它不能按原样工作,但我不知道如何做到…

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

如果有人能帮助我,我将不胜感激。

将您的RewriteCond置于RewriteRule之前,或者将您的管理员重写置于其他一切之前。

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

由于第二个RewriteRule的位置,您的RewriteCond实际上正在应用于它。

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

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

这应该行得通。

最新更新