当你在子域名时,htaccess显示相同的主域内容

时间:2015-09-30 12:29:16

标签: .htaccess mod-rewrite redirect subdomain

我有网站www.domain.com(服务器根位于/domain.com/web/),现在我创建了子域m.domain.com(在服务器根目录中位于/domain.com/sub/m/)。

我将.htaccess添加到子域root:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?m\.domain\.com$
RewriteCond %{REQUEST_URI} !^/m
RewriteRule ^(.*)$ ../../web/$1 [QSA,L]

但它显示Internal Server Error

我试过了:

RewriteRule ^(.*)$ http://www.domain.com/$1 [QSA,L]

但是这会将您重定向到主域名。我需要保留在子域名中,但内容与主域名相同。

此外,我已经在SO上检查了更多解决方案,但它们都没有工作。

修改

我在Apache中尝试设置另一个VirtualHost:

DocumentRoot /domain.com/web
<Directory "/domain.com/web">
allow from all
Options None
</Directory>
ServerName m.domain.com
ServerAlias m.domain.com

现在主域和子域也显示503 - 禁止。

1 个答案:

答案 0 :(得分:1)

我不知道为什么这一点过于复杂。如果你想使用相同的内容,那么我可以看到几种方法来做到这一点。

  1. 刚刚将m.domain.com添加到Apache VirtualHost配置中的ServerAlias指令中,并且该子域的所有请求都将显示已设置的文档根目录中的内容,但保持显示子域。 (最推荐)
  2. 将子域配置文件的document root设置为与您的主域名相同。 (不太推荐)
  3. 通过mod_proxy标志使用P反向代理内容,以便仍然显示子域。 (最不推荐)
  4. 通过mod_proxy标记使用P的示例。

    RewriteCond %{HTTP_HOST} ^m\.domain\.com [NC]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [P]
    

    备注:必须在指向您的服务器IP的DNS中定义m.domain.com

    您主域的VirtualHost看起来应该是这样的。您的m子域名不需要vhost。

    <VirtualHost *:80>
        ServerName www.example.com
        ServerAlias m.example.com 
        DocumentRoot "/www/domain.com/web"
        <Directory "/www/domain.com/web">
           # deny .htaccess use.
           AllowOverride None
           Order allow,deny
           Allow from all
        </Directory>
    </VirtualHost>
    

    重新启动Apache以进行所有配置更改。