Apache htaccess子域重定向

Apache htaccess子域重定向,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我有一个域名example.com,在.htaccess中,我使用下面的代码将非www转发到www地址 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 现在我创建了一个子域test.example.com,由于上面的规则,它将成为,所以我想写它自己的htaccess文件,将www重定向到非www。所以在子域根中,我有一个.htacc

我有一个域名example.com,在.htaccess中,我使用下面的代码将非www转发到www地址

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
现在我创建了一个子域test.example.com,由于上面的规则,它将成为,所以我想写它自己的htaccess文件,将www重定向到非www。所以在子域根中,我有一个.htaccess文件,其中包含以下规则

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

它不工作,并在重定向循环中运行,我如何修复它?

取出!还有逃跑

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

你不需要两条规则。只需将此规则保留在主域的main.htaccess中:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

现在,RewriteCond%{HTTP_HOST}^example\.com$条件只会影响主域,而不会影响您的子域。

我找到了一个非常简单的解决方案

我的主站点文档根是/home/example/public_html,子域文档根是/home/example/public_html/test


我刚刚将subdomain的文档根目录更改为/home/example/test,它成功了

没用,还是一样的问题。我只在子域htaccess文件中做了更改。你确定它实际上正在访问该文件吗?Vhost问题可能是吗?问题是,一旦我删除htaccess规则,它就会开始工作并转发到www.test.example.com。但如果它转发到www.test.example.com,那就意味着它遇到了最重要的问题。这就是问题所在,它会进入循环,因为这两个规则都在工作。只要我删除子域转发规则,它就可以正常工作。不确定如何避免顶级htaccess工作。更改DocumentRoot肯定会避免影响子域,但您仍然可以保留此规则,以防将来创建一些CNAME、别名域。