htaccess中的RewriteRule优先级

时间:2014-11-28 13:39:08

标签: regex apache .htaccess mod-rewrite

我正在尝试设置.htaccess文件来重写URL。

设置

这是我当前的.htaccess设置:

RewriteEngine On
Options -Multiviews

RewriteRule ^admins/login.html$ mvc.php?rt=admins/login
RewriteRule ^([^/]+)/([^/]+).html$ mvc.php?rt=$1&id=$2

我们的想法是将admins/login.html模式与第一个RewriteRule语句和其他xxxx/xxxx.html模式与第二个匹配。


检查结果

要检查结果,我只需在mvc.php上打印收到的值

echo 'rt = '.$_REQUEST['rt'].', id = '.$_REQUEST['id']; 

键入admins/login.html模式

  • 我的目标:rt = admins/login, id =
  • 我得到了什么:rt = mvc.php, id = login

当我评论第二个RewriteRule语句时,一切正常 url重写规则是否有优先权?我错过了什么?

1 个答案:

答案 0 :(得分:1)

这是因为您的规则不止一次执行。要阻止此行为,请使用以下内容:.htaccess:

Options -Multiviews
RewriteEngine On

# REDIRECT_STATUS is set to 200 after first rule execution
RewriteCond %{ENV:REDIRECT_STATUS} .+
RewriteRule ^ - [L]

RewriteRule ^admins/login\.html$ mvc.php?rt=admins/login [L,QSA,NC]

RewriteRule ^([^/]+)/([^/]+)\.html$ mvc.php?rt=$1&id=$2 [L,QSA,NC]