![mod_rewrite 似乎忽略了条件语句](https://linux22.com/image/545733/mod_rewrite%20%E4%BC%BC%E4%B9%8E%E5%BF%BD%E7%95%A5%E4%BA%86%E6%9D%A1%E4%BB%B6%E8%AF%AD%E5%8F%A5.png)
我快被这个 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]
如果它不起作用请告诉我。