mod_rewrite 似乎忽略了条件语句

mod_rewrite 似乎忽略了条件语句

我快被这个 htaccess 搞死了:

RewriteCond %{HTTP_HOST} ^[www\.]?old\.com [NC]  
RewriteCond %{REQUEST_URI} ^.+$  
RewriteCond %{REQUEST_URI} !^wp-admin  
RewriteCond %{REQUEST_URI} !^index  
RewriteCond %{REQUEST_URI} !^subdomain  
RewriteRule ^(.*)$ http://www.new.com/%{REQUEST_URI} [R=301,L]  

我试图将所有流量从 www.old.com 重定向到 www.new.com,但以下情况除外:

www.old.com
old.com
old.com/wp-admin
old.com/subdomain

我仍然希望旧站点能够显示并能够管理它,但任何站点old.com/something都应重定向至new.com/something

还有一件事,我无法通过将其用作反向引用来使其工作。我不得不在其中$1进行硬编码(这有效)。%{REQUEST_URI}

最后一个例子(old.com/subdomain)完全是第二个网站,我也不想干扰它的运行。

我读过很多网站,从正则表达式的角度来看,每种变体都完全合理,它们都应该有效,但事实并非如此。这让我抓狂。

答案1

在您的.htaccess 中尝试以下规则:

RewriteCond %{HTTP_HOST} ^(www\.)?old\.com$ [NC]  
RewriteCond %{REQUEST_URI} !^/?(wp-admin|index|subdomain) [NC]
RewriteRule ^(.+)$ http://www.new.com/$1 [R=301,L,QSA,NE]

如果它不起作用请告诉我。

相关内容