mod_rewrite在特定规则后停止处理

时间:2016-06-19 08:04:41

标签: php apache .htaccess mod-rewrite

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l

  RewriteRule ^viewuserimage/(.*) index.php?viewuserimage=$1 [L]
  RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]


</IfModule>

在这里你可以看到我的.htaccess文件。我想重写所有以viewuserimage / index.php开头的请求?..,而不处理下一个规则。如果我通过

/viewuserimage/test

输出:

index.php?page=index.php&viewuserimage=test

1 个答案:

答案 0 :(得分:2)

我发现问题,当你执行viewuserimage规则时,你调用index.php?viewuserimage=$1,所以它会再次触发.htaccess,剩下的唯一规则是最后一个,所以它会连接。

我可以给你2个解决方案:

第一个

更改此

RewriteRule ^viewuserimage/(.*) index.php?viewuserimage=$1 [L]

RewriteRule ^viewuserimage/(.*) index.php?viewuserimage=$1 [END]

[END]标志将停止,就像一个perma退出,不等于[L]More info

第二个

更改此规则

RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

RewriteRule ^(page1|page2|page3|pageAllowed)$ index.php?page=$1 [L,QSA]

在此规则中,您可以告知哪些页面是允许的,因此只有这些页面匹配并转到index.php?page=$1