重写条件以检查是否有两个URL

时间:2012-03-23 10:13:28

标签: apache .htaccess url mod-rewrite

如果用户通过http://mysitehttp://www.mysite

访问了该网站,我就强制更改网址

但是目前我只检查该网站是否与http://store

的主要子域不相等

我还有另一个子域,但这也被覆盖了,所以我需要改变我当前代码的工作方式:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^store\.mysite\.com [NC]
RewriteRule (.*) http://store.mysite.com/$1 [R=301,L]

我更愿意检查网址是否为以下任何一种:

http://mysite.com
http://www.mysite.com

...然后应用重写规则,如何更改我的重写条件才能执行此操作?

2 个答案:

答案 0 :(得分:4)

尝试这个 - 在这里工作得很好:

RewriteCond %{HTTP_HOST} ^(mysite\.com|www\.mysite\.com)$ [NC]
RewriteRule .* http://store.mysite.com%{REQUEST_URI} [R=301,L]
  • 这里我使用正则表达式模式在单一条件下放置了2个域名。
  • 我还修改了RewriteRule(这就是我喜欢这样做的方式)。
  • 您可能还想在此处添加QSA标记,因为它是301重定向(取决于您的实际网址) - [R=301,QSA,L]

其他方法:

1)每个域名的单独条件(需要指定需要使用OR逻辑而不是默认AND):

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC]
RewriteRule .* http://store.mysite.com%{REQUEST_URI} [R=301,L]

2)与上面相同..但使用纯文本比较而不是正则表达式:

RewriteCond %{HTTP_HOST} =mysite.com [NC,OR]
RewriteCond %{HTTP_HOST} =www.mysite.com [NC]
RewriteRule .* http://store.mysite.com%{REQUEST_URI} [R=301,L]

答案 1 :(得分:1)

到目前为止,我已经这样做了:

RewriteCond %{HTTP_HOST} mysite\.com [NC]
RewriteCond %{HTTP_HOST} www\.mysite\.com [NC]
RewriteRule (.*) http://store.mysite.com/$1 [R=301,L]

可以对此进行任何改进吗?

实际上第一个RewriteCond没有检测到http://mysite.com