301子域重定向问题

时间:2014-01-29 20:04:40

标签: apache .htaccess redirect http-status-code-301

我在我的服务器上运行了几个TLD,我正在尝试将它们从非www重定向到www,这非常有效,除了我需要解决的一些例外。

问题1是一个通用代码,它运行良好,但子域也被重定向,这是不可能发生的。这是代码:

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

如果我可以管理这个不重定向子域,那将是完美的解决方案。

我也试过这个,这是一个更多的代码,因此不是很好,它不重定向子域。但是,还有另一个问题:url sample.com/folder/folder2/index.html正被重定向到www.sample.com而不是www.sample.com/folder/folder2/index.html

以下是代码:

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

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

RewriteCond %{HTTP_HOST} ^sample\.co.uk [NC]
RewriteRule ^(.*) http://www.sample.co.uk/$1 [L,R=301]

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

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

关于如何修复第一种方法的任何想法,以便忽略来自子域的请求,例如sub.sample.com并将所有请求重定向到www版本,包括URL,如sample.com/folder/folder2/index.html到www.sample.com/folder/folder2/index.html?

2 个答案:

答案 0 :(得分:1)

您可以使用此规则来避免将www添加到子域:

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

答案 1 :(得分:1)

不确定为什么第二件事情发生了。使用您的代码,当我请求:sample.com/folder/folder2/index.html时,我会被重定向到www.sample.com/folder/folder2/index.html。你确定某个地方没有另一个htaccess文件或index.html正在做什么吗?

关于第一期,请尝试:

RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+\.([a-z]){2,3}(?:\.[a-z]{2}|))$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]