【问题标题】:.htaccess - RewriteRules working, but browser address bar displaying full (unfriendly) URL.htaccess - RewriteRules 工作,但浏览器地址栏显示完整(不友好)URL
【发布时间】:2010-04-09 02:13:35
【问题描述】:

无法通过网络或这些论坛找到解决此问题的方法 - 如果我遗漏了什么,请道歉!

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

除非我添加了 RewriteRule 以添加“www”。如果用户没有输入它,则放在 URL 的前面 - 以确保只有一个出现在搜索引擎中。这就是现在发生的事情,我不知道为什么!

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

www.example.com/importantword-nonimportantword/

.htaccess sn-p:

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 的顺序存在一些问题,但它在试图逻辑地逐步解决它并解决问题时正在努力工作!

任何帮助或指点将不胜感激!

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案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]
    

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

    【讨论】:

    • 感谢您的洞察力!您的建议非常有效,并且解释很有意义。非常感谢!
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多