htaccess重定向与排除

时间:2012-12-04 15:40:02

标签: php .htaccess url-rewriting rewrite

这是我的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_REFERER} !^http://shop.com/index.php?controller=authentication&back=my-account [NC]
RewriteRule (.*) http://shop.com/index.php?id_category=12&controller=category [R=301,L]

我想:

  • 我的index.php被重定向到index.php?id_category=12&controller=category
  • 如果Referer等于http://shop.com/index.php?controller=authentication&back=my-account
  • 将覆盖此重定向

似乎第三个RewriteCond,它应该创建异常,当Referer等于index.php时,它与http://shop.com/index.php?controller=authentication&back=my-account的请求不匹配。因此,RewriteRule被考虑在内,而它不应该。

这种行为让我觉得%{HTTP_REFERER}在网址中没有包含参数(在这种情况下:id_category=12&controller=category)。

1 个答案:

答案 0 :(得分:1)

确实如此。你只需要逃避问号。试试这个:

RewriteCond %{HTTP_REFERER} !^http://shop.com/index.php\?controller=authentication&back=my-account [NC]