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

htaccess show the same content of main domain, when you are on subdomain

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

我将 .htaccess 添加到子域根目录:

RewriteEngine on
RewriteBase /

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

但是它正在显示 Internal Server Error

我试过这个:

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

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

此外,我还检查了更多关于 SO 的解决方案,但其中 none 有效。

编辑:

我尝试在 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. 刚刚将 m.domain.com 添加到 Apache VirtualHost 配置中的 ServerAlias 指令,所有对该子域的请求将显示设置的文档根目录中的内容,但保留子域显示。 (最推荐)
  2. 将您的子域配置文件的 document root 设置为与您的主域名相同。 (不太推荐)
  3. 通过 P 标志使用 mod_proxy 反向代理内容,以便子域仍然显示。 (最不推荐)

通过 P 标志使用 mod_proxy 的示例。

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

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

您的主域虚拟主机应如下所示。您的 m 子域不需要虚拟主机。

<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。