Apache 301子域重定向问题

Apache 301子域重定向问题,apache,.htaccess,redirect,http-status-code-301,Apache,.htaccess,Redirect,Http Status Code 301,我在我的服务器上运行了几个TLD,我正在尝试将它们从非www重定向到www,这非常好,除了一些需要修复的例外情况 第一个问题是一个通用代码,它工作得很好,除了子域也被重定向,这是不应该发生的。代码如下: RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] RewriteEngine On RewriteCond %{HTTP_HOST} ^sa

我在我的服务器上运行了几个TLD,我正在尝试将它们从非www重定向到www,这非常好,除了一些需要修复的例外情况

第一个问题是一个通用代码,它工作得很好,除了子域也被重定向,这是不应该发生的。代码如下:

    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
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]
如果我能管理这个不重定向子域,那将是完美的解决方案

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

代码如下:

    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
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版本,包括sample.com/folder/folder2/index.html到www.sample.com/folder/folder2/index.html等URL?

您可以使用此规则避免向子域添加
www

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

不知道为什么会发生第二件事。使用您的代码,当我请求:
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]

这对子域问题有效。另一个问题仍然没有解决,但也许你是对的,我在某处有另一个htaccess文件。这是一个非常复杂的脚本,所以我需要一些时间来解决这个问题。非常感谢您帮助我解决子域名问题!!!很棒的东西:)这不是只对像yourDomain.com这样的简单域名(xyz+单级TLD)有效吗?OP希望避免使用子域。这与
sub.domain.com
不匹配,我想到的是这样的域。它不会被钉在上面。这是一个非常好的问题。不要担心你在其他地方收到的刺耳的声音——通常没有那么刺耳!