.htaccess 将两个mod_重写规则合并为一个

.htaccess 将两个mod_重写规则合并为一个,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我需要将两个mod_重写规则合并为一个 1) 在CMS中,有index.php处理web上的所有查询。例如,如果URI是domain.com/query-string,index.php调用/包含所需的部分和显示内容。我是这样做的: RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ RewriteRule ^([^*]+) index.php [L,QSA] RewriteCond %{HTTP_HOST} ^www.domain.com [NC] Re

我需要将两个mod_重写规则合并为一个

1) 在CMS中,有index.php处理web上的所有查询。例如,如果URI是domain.com/query-string,index.php调用/包含所需的部分和显示内容。我是这样做的:

RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^([^*]+) index.php [L,QSA] 
RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
2) 我需要使用HTTP 301重定向,将www永久移动到非www。例如www.domain.com到domain.com。我是这样做的:

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文件时,它停止工作,所有链接都会重定向到do index.php和show homepage。这就是为什么,我需要将这两条规则合并为一条

在.htaccess的开头是:

RewriteEngine On
RewriteBase /
有什么解决办法,怎么做

全方位访问:

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]
我试图重新安排规则,但没有解决办法


非常感谢。

这是正确的顺序。根据到目前为止提供的信息,我看不出有任何理由不应该这样做(在测试机器上工作)。如果它仍然不起作用——那么可能在其他地方有另一条规则(或者在PHP应用程序中进行重定向)


顺便说一句,如果您将
%{HTTP_HOST}
与正则表达式(模式以
^
开头)匹配,那么最好避开点,因为在某些情况下,它会产生巨大的差异(可能不是在您的情况下,但仍然是因为点意味着“任何字符”)--
^www.domain.com
。或者使用纯字符串比较代替正则表达式:
=www.domain.com

您应该显示整个.htaccess(至少——重写规则的一部分,但全部)。问题很可能是按照规则的顺序(考虑到您迄今为止提供的规则——它们应该是3-2-1顺序)我在第一篇文章中添加了完整的htaccess。