.htaccess - RewriteRules工作,但浏览器地址栏显示完整(不友好)的URL

时间:2010-04-09 02:13:35

标签: .htaccess mod-rewrite

无法在网络或这些论坛上找到解决方案 - 如果我错过了某些内容,请道歉!

我的.htaccess RewriteRules运行良好 - 在我的网页中有搜索引擎和用户友好的链接,以及在后台隐藏的不友好的数据库URL。

除非我添加了RewriteRule以添加“www”。如果用户没有输入,请到URL的前面 - 以确保只有一个出现在搜索引擎中。这就是现在发生的事情,我无法弄明白为什么!

我对内容的友好URL结构是这样的,数据库查询字符串使用第一个“重要字”:

www.example.com/importantword-nonimportantword/

.htaccess片段:

Options +FollowSymLinks
Options -Indexes

RewriteEngine on
RewriteOptions MaxRedirects=10

RewriteBase /

RewriteRule ^/$ index.php [L]

RewriteRule ^(.*)-(.*)/overview/$ detail.php?categoryID=$1 [L]

RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [L]

自从我添加最后两行后发生了什么:

案例1:用户类型(或点击次数)www.example.com/honda-vehicle/overview /
- 正确工作
- 它们被带到正确的页面,浏览器URL栏显示:

www.example.com/honda-vehicles/overview/

案例2:用户输入example.com
- 正确工作
- 它们被带到www.example.com,浏览器URL栏显示:

www.example.com

案例3:用户类型(或点击)example.com/honda-vehicles/overview / 即没有前缀“www”
- 不能正常工作
- 它们被带到右侧页面,但浏览器URL栏显示不友好的URL:

www.example.com/detail.php?categoryID=honda 

我认为RewriteRules的顺序存在一些问题,但它正试图在逻辑上逐步完成并弄明白它!

非常感谢任何协助或指示!

1 个答案:

答案 0 :(得分:1)

规则按其出现的顺序应用。这意味着,当请求honda-vehicles/overview/时,将应用您的第二条规则,将路径重写为detail.php?categoryID=honda。由于 L 标志,当前重写过程立即停止,但也使用新URL重新启动,导致现在应用了第三个规则。

您只需更改订单即可解决此问题。将您的最后一条规则作为第一条规则(并添加 R 标志):

RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

经验法则是将那些导致外部重定向的规则放在这些规则之前,这只会导致内部重写。