无法在网络或这些论坛上找到解决方案 - 如果我错过了某些内容,请道歉!
我的.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的顺序存在一些问题,但它正试图在逻辑上逐步完成并弄明白它!
非常感谢任何协助或指示!
答案 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]
经验法则是将那些导致外部重定向的规则放在这些规则之前,这只会导致内部重写。