我有网站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 - 禁止。
答案 0 :(得分:1)
我不知道为什么这一点过于复杂。如果你想使用相同的内容,那么我可以看到几种方法来做到这一点。
m.domain.com
添加到Apache VirtualHost配置中的ServerAlias指令中,并且该子域的所有请求都将显示已设置的文档根目录中的内容,但保持显示子域。 (最推荐) document root
设置为与您的主域名相同。 (不太推荐) mod_proxy
标志使用P
反向代理内容,以便仍然显示子域。 (最不推荐) 通过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以进行所有配置更改。