.htaccess - .htaccess-RewriteRules工作正常,但浏览器地址栏显示完整

尚未在网上或这些论坛上找到解决问题的方法-如果我错过了某些事情,表示歉意!

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

除非我添加了RewriteRule来添加“www”。如果用户未输入网址,则显示在网址前面-确保在搜索引擎中仅显示一个网址。这是现在发生的事情,我不知道为什么!

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

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,浏览器网址栏显示:
www.example.com

情况3:用户键入(或点击)example.com/honda-vehicles/overview/,即不带前缀“www”
-无法正常运作
-它们被带到了正确的页面,但是浏览器的URL栏显示了不友好的URL:
www.example.com/detail.php?categoryID=honda 

我认为RewriteRules的顺序存在一些问题,但它在尽我所能,试图从逻辑上逐步解决并弄清楚它!

任何协助或指针的任何帮助将不胜感激!

最佳答案

规则以它们出现的顺序应用。这意味着,当请求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]

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

关于.htaccess - .htaccess-RewriteRules工作正常,但浏览器地址栏显示完整(不友好)URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604709/

相关文章:

wcf - Windows Service中的WCF主机:无法获取wsdl

zend-framework - 无法根据差异生成迁移类(Zend Framework 1.10 +

continuous-integration - 与 ClearCase 和长期更新的快照 View

macos - 您可以使用 PackageMaker 命令从文件列表中创建安装程序吗?

version-control - 在Eclipse CDT中具有多个二进制文件的项目

asp.net - 连接到 https ://webservice in asp. 网络应用程序

.net - .net 应用程序运行的进程是非托管的还是正常的 Windows 进程?

.net - .NET Framework 4客户端配置文件与.NET Framework 3.5客

jboss - 将Drools与JBossESB集成

security - IHTMLTxtRange.execCommand(“Copy”,false,