mod-rewrite 子域名

mod-rewrite 子域名

我遇到了一个非常独特的问题(至少我以前从未见过)。

我在共享主机上有一个帐户,在那里托管多个域。

因此,域 A(主帐户)是 wwwroot 上的根文件夹

域 BD 是根目录的子文件夹

我目前正在使用 Coldfusion 重定向来检查 cgi.server_name 并发送到正确的子文件夹。但是,我最终得到了 DomainB.com/domainB/index.cfm

这会导致问题,例如,如果我想将用户发送到 DomainB.com/admin/,服务器无法找到它,因为 /domainB/ 不在路径中。

所以我想使用 mod-rewrite 来解决这个问题。我以为我找到了解决办法:

# If same website is accessible by different addresses, like domain.com, 
# www.domain.com and we want to redirect to one address.

RewriteCond %{HTTP_HOST} !^www.domainB.com$ [NC]
RewriteRule ^(.*)$ http://www.domainB.com/$1 [R,L]

RewriteCond %{HTTP_HOST} ^www.domainB.com$
RewriteCond %{REQUEST_URI} !^/domainB/
RewriteRule ^(.*)$ /domainB/$1

这一切似乎都很合乎逻辑,并且在一定程度上有效,但是,每个域名都会重定向到 www.domainB.com,这当然不好。当 domainD 尝试访问他们的网站却看到 www.domainC.com 时,他们会很不高兴。

有人知道我做错了什么吗?或者更好的是,如何使其动态化?假设每个子目录都与域名同名。例如,www.domainB.com 将有一个子目录 /root/domainB/

提前致谢。

编辑

好的,这就是我现在所拥有的(只是附加以确保它与你的相匹配)

RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI}   [R=301,L,QSA]

RewriteCond %{REQUEST_URI} ^/domainB.com [NC]
RewriteRule /domainB/(.*) http://www.domainB.com/$1 [R=301,L,QSA]

但现在,它将所有内容重定向到 /root/ 网站或 www.domainA.com

答案1

这听起来像是 apache 虚拟站点的完美用途。您有权访问 apache 配置文件吗?

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /wwwroot/
ServerName www.domainA.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /wwwroot/domainb/
ServerName www.domainb.com    
# Other directives here

</VirtualHost>

http://httpd.apache.org/docs/2.0/vhosts/examples.html

答案2

没有...

#This first part checks for 'www' and appends it if its not there
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

#This next part is the magic that forwards to the appropriate subfolder including any
query string(s), etc.
RewriteCond %{HTTP_HOST} ^www.domainX.com$ [NC]
RewriteCond %{REQUEST_URI} !^/domainX/
RewriteRule ^(.*)$ /domainX/$1

我以为就是这样,但是...

当我点击 www.domainX.com/somedirectory/ 时,结果目录是 www.domainX/domainX/somedirectory/,所以,重写并不像我希望的那样工作。

我希望它物理地访问服务器上的该目录,但不向用户显示/传递该子目录,本质上,我希望该子目录是不可见的。有什么想法吗?

答案3

也许你需要改变最后一行:来自:

RewriteRule ^(.*)$ /domainX/$1

到:

RewriteRule ^(.*)$ /$1

相关内容