为什么这个.htaccess没有默默地重定向?

时间:2016-06-26 12:23:07

标签: php .htaccess redirect mod-rewrite

任何人都可以告诉我为什么以下内容明显改变了浏览器中的URL,而不是默默地重定向?重定向有效,但可见。

示例网址 http://domain.com/_test/sportswire/uk/football/huddersfield

... visibily重定向,显示查询字符串参数。

RewriteEngine on
RewriteBase /_test/sportswire

#favour naked domain over www
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]

#disallow trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

###THIS RULE### channel pages - territory/sport/channel/[res type?]
RewriteRule ^(\w+)\/(\w+)\/(\w+)(?:\/(\w+))?$ channel.php?territory=$1&sport=$2&team=$3&res_type=$4 [L,NC,R=301]

#channel pages - with item (if from external referrer) - territory/sport/channel/res_type/"item"/item_id/pretty
RewriteRule ^(\w+)\/(\w+)\/(\w+)\/(\w+)\/story\/\w{11}\/[^\/]+$ channel.php?territory=$1&sport=$2&team=$3&res_type=$4&item=$5 [L,NC,R=301]

我尝试/阅读的内容:

  • 删除R标志(没有欢乐;我还有其他带有R标志的.htaccess文件,可以静默重定向)
  • 添加/删除重写基础(已完成;也尝试过绝对基础)
  • 不要使用绝对URL(我不是)

我相信地球上没有任何东西像mod-rewrite一样令人困惑。

2 个答案:

答案 0 :(得分:1)

尝试完全删除[R]标志,以便服务器不会通知浏览器更改。

htaccess更改会立即生效,因此您无需重新启动服务器。但是,由于您之前尝试过R=301,因此您的浏览器可能会记得直接使用查询字符串访问该网址,甚至不会向服务器询问您尝试重定向的网址。要查看我推荐的更改效果,请以隐身或隐私浏览模式启动新的浏览器实例并测试新规则。

旁注:为什么要逃离路径中的所有/?我觉得你不需要。

答案 1 :(得分:1)

[R]标志不应该在那里。如果可能的话,尝试重新启动Apache,我注意到它有时会有所帮助。 尝试使用其他浏览器或其他网址,他们可以缓存重定向。