我遇到了一个非常独特的问题(至少我以前从未见过)。
我在共享主机上有一个帐户,在那里托管多个域。
因此,域 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>
答案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