【发布时间】:2012-05-28 21:54:14
【问题描述】:
我需要将两个 mod_rewrite 规则合二为一。
1) 在 CMS 中,有 index.php 处理网络上的所有查询。例如,如果 URI 是 domain.com/query-string,则 index.php 调用/包含所需的部分并显示内容。我这样做:
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^([^*]+) index.php [L,QSA]
2) 我需要使用 HTTP 301 重定向将 www 永久移动到非 www。例如 www.domain.com 到 domain.com。我这样做:
RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
但是当我将这两个规则都放入 htaccess 文件时,它会停止工作,并且 Web 重定向上的所有链接都会执行 index.php 并显示主页。因此,我需要将这两条规则合二为一。
.htaccess 的开头是:
RewriteEngine On
RewriteBase /
有什么解决办法,怎么办?
整个.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^([^*]+) index.php [L,QSA]
RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
我尝试重新排序规则,但没有解决方案。
非常感谢。
【问题讨论】:
-
你应该展示你的整个.htaccess(至少——重写规则部分,但全部)。问题很可能是规则的顺序(考虑到您迄今为止提供的规则——它们应该是 3-2-1 的顺序)
-
我已将整个 htaccess 添加到第一篇文章中。
标签: .htaccess mod-rewrite