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 - 禁止。
我不知道为什么这必须过于复杂。如果你想使用相同的内容,那么我可以看到一些方法来做到这一点。
- 刚刚将
m.domain.com
添加到 Apache VirtualHost 配置中的 ServerAlias 指令,所有对该子域的请求将显示设置的文档根目录中的内容,但保留子域显示。 (最推荐)
- 将您的子域配置文件的
document root
设置为与您的主域名相同。 (不太推荐)
- 通过
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。
我有网站 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 - 禁止。
我不知道为什么这必须过于复杂。如果你想使用相同的内容,那么我可以看到一些方法来做到这一点。
- 刚刚将
m.domain.com
添加到 Apache VirtualHost 配置中的 ServerAlias 指令,所有对该子域的请求将显示设置的文档根目录中的内容,但保留子域显示。 (最推荐) - 将您的子域配置文件的
document root
设置为与您的主域名相同。 (不太推荐) - 通过
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。