我的问题很简单,但我似乎找不到解决方案。
我有一个域名www.域名.com有子域名。
www.domain.com 的文档根目录是/home/domain/public_html
子域名(不包括 www)需要重定向到 example.com,即 abc.domain com 需要重定向到/home/example/public_html
另外,需要保留 url。即abc.domain.com
需要显示在地址栏中。
我至今所做的事情 我在 httpd.conf 中维护了以下条目
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)domain.com$
RewriteRule ^.*$ http://%1example.com$0
但是,URL 变为 abc.example.com,并且 www.domain.com 也被重定向到 www.example.com。
请建议解决此问题的最佳方法。
虚拟主机配置,没有重写规则,
<VirtualHost *:80>
ServerName domain.com
ServerAlias *.domain.com www.domain.com
DocumentRoot /home/domain/public_html
UseCanonicalName Off
## User abc # Needed for Cpanel::ApacheConf
UserDir enabled abc
<IfModule !mod_disable_suexec.c>
<IfModule !mod_ruid2.c>
SuexecUserGroup abc abc
</IfModule>
</IfModule>
<IfModule mod_ruid2.c>
RMode config
RUidGid abc abc
</IfModule>
<IfModule itk.c>
AssignUserID abc abc
</IfModule>
</VirtualHost>
答案1
这里不需要RewriteRule
指令。您需要为子域名创建一个虚拟主机,然后将与主域名相同的文档根目录分配给该子域名。
RewriteRule
当您需要将用户的浏览器重定向到新的 URL 时使用,并且新的 URL 始终显示在浏览器的 URL 字段中。
因此,您应该删除RewriteRule
和相关指令,并使用这个虚拟主机配置:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /home/domain/public_html
UseCanonicalName Off
## User abc # Needed for Cpanel::ApacheConf
UserDir enabled abc
<IfModule !mod_disable_suexec.c>
<IfModule !mod_ruid2.c>
SuexecUserGroup abc abc
</IfModule>
</IfModule>
<IfModule mod_ruid2.c>
RMode config
RUidGid abc abc
</IfModule>
<IfModule itk.c>
AssignUserID abc abc
</IfModule>
</VirtualHost>
<VirtualHost *:80>
ServerName other.domain.com
ServerAlias *.domain.com
DocumentRoot /home/example/public_html
UseCanonicalName Off
## User abc # Needed for Cpanel::ApacheConf
UserDir enabled abc
<IfModule !mod_disable_suexec.c>
<IfModule !mod_ruid2.c>
SuexecUserGroup abc abc
</IfModule>
</IfModule>
<IfModule mod_ruid2.c>
RMode config
RUidGid abc abc
</IfModule>
<IfModule itk.c>
AssignUserID abc abc
</IfModule>
</VirtualHost>
对于第二个虚拟主机,您可以使用任何不存在的子域名作为ServerName
指令。但是,您需要一个非通配符ServerName
指令,因为通配符只允许在ServerAlias
指令中使用。
这里的技巧是第一个VirtualHost
块用于domain.com
和www.domain.com
,因为 Apache 使用第一个匹配的VirtualHost
块。文档根目录设置为/home/domain/public_html
。
第二个VirtualHost
块用于所有其他匹配的域,并且文档根目录位于此处/home/example/public_html
。
答案2
这对我有用:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^w]*).domain.com$
RewriteRule ^.*$ http://%1.example.com$0
正则表达式现在将匹配除 w 字符串之外的任何主机名。(如果您需要 w.domain.com、ww.domain.com、wwww.domain.com 等来工作,则需要对此进行修改。)