在.htaccess优先级冲突中重写

时间:2016-08-04 10:42:28

标签: php apache .htaccess redirect mod-rewrite

以下是.htaccess的重写文件。但我遇到了一个问题。 这是我的.htaccess文件。

RewriteEngine On
RewriteBase /dashboard/sample_proj/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule t([\d]+)/ threads/$1/  [R=301]
RewriteRule f([\d]+)/ forums/$1/  [R=301,L]
RewriteRule t([\d]+)-([\d]+)/ threads/$1/page-$2 [R=301,L]
RewriteRule t([\d]+)/#post([\d]+) threads/$1/#post-$2 [R=301,L]

但这是一个问题,因为网址之间存在优先级冲突。 例如     https://www.url.com/t3550/#post44859 重定向到https://www.url.com/threads/3550/#post44859,但应该重定向到https://www.url.com/threads/3550/#post-44859(这是因为第一个和第四个规则之间存在冲突)。

1 个答案:

答案 0 :(得分:4)

片段,#之后的内容,不会发送到服务器。它们在浏览器中完全是本地的,只能由浏览器评估。 #上的规则匹配永远不会匹配,因为服务器永远不会看到URL片段。