使用Apache重写规则将多个域重定向到主域

时间:2014-10-24 21:00:16

标签: apache .htaccess mod-rewrite redirect

我希望我不会在这里重复,但我没有找到这个问题的答案。

很久以前,我的网站托管技术帮助我为我的网站设置.htaccess,现在它似乎不再正常工作,可能导致我的网站因为重复的内容而失去了许多搜索排名合并链接汁。

我想要将多个域重定向到主域,因此,如果有人尝试访问domain1.com/page1.htm,则会将其重定向到www.maindomain.com/page1.htm。

也就是说,我希望将多个域的所有请求重定向到主域上的相同路径,始终使用www。前缀。

此外,安全证书适用于域的非www版本,因此我希望在https请求时不使用www来访问它。

现在这是.htaccess文件中的内容,它无法正常工作。有什么错误吗?或者这是正确的,显然还有其他事情阻止此代码工作?如果是这样,那可能是什么?

RewriteEngine on
rewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTP_HOST} !^www.maindomain.com
RewriteCond %{HTTP_HOST} !^www.domain1.com
RewriteCond %{HTTP_HOST} !^www.domain2.com
RewriteCond %{HTTP_HOST} !^www.domain3.com
RewriteCond %{HTTP_HOST} !^www.domain4.com
rewriterule (.*) http://www.maindomain.com/$1 [R=permanent,L]

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果您购买的是“maindomain.com”而非“www.maindomain.com”的证书,则htaccess中的任何内容都不会帮助您解决安全警告问题。在请求任何内容之前,执行SSL握手,因此服务器端的任何内容都不知道请求的内容。如果有人试图访问www域,您将需要购买另一个证书或者使用安全例外。

其他一切,请尝试:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.maindomain\.com$ [NC]
RewriteRule ^ http://www.maindomain.com%{REQUEST_URI} [L,R]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^maindomain\.com$ [NC]
RewriteRule ^ https://maindomain.com%{REQUEST_URI} [L,R]