我在这里已经阅读了很多关于此的问题和答案,但似乎没有解决我的具体问题。
我想将任何子域重定向到子目录以匹配。
所以:x.domain.com会转到domain.com/x,而y.domain.com会转到domain.com/y - 但我希望这样做,而地址栏中的URL不会更改。< / p>
这是我到目前为止所拥有的:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www)\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com [NC]
RewriteRule ^ /%1 [P,L]
但是这会将我带到一个网站重定向循环,在子栏中仍存在子域的地址不正确。
例如,x.domain.com将我带到x.domain.com/x,我收到重定向循环错误。
如果有人能指出我正确的方向,我将不胜感激!我没有改变似乎工作......
答案 0 :(得分:8)
首先,确保正确配置了apache配置中的vhost,并且domain.com的所有子域都在同一主机配置中(通配符):
<VirtualHost *:80>
ServerName domain.com
ServerAlias *.domain.com
...
您可以使用以下htaccess配置进行重定向:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ http://domain.com/%1/$1 [L,NC,QSA]
现在,如果您打开asd.domain.com,它应该将您重定向到domain.com/asd。 您仍然会遇到问题,重定向在URL地址栏中可见。为了防止这种情况,请在服务器上启用mod_proxy(并加载子模块)并交换&#34; L&#34;标志着&#34; P&#34;标志:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ http://domain.com/%1/$1 [P,NC,QSA]
如果这不起作用,在子域调用上查看vhost配置和error.log的内容将会很有帮助!
参考文献:
.htaccess rewrite subdomain to directory
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_p
答案 1 :(得分:7)
如果您的服务器配置为允许通配符子域,则可以在SELECT MAX(AId), BId
FROM TableABBridge
GROUP BY BId
HAVING Count(AId) = 1
不SELECT a.Id
FROM TableABBridge a
JOIN
(SELECT BId
FROM TableABBridge
GROUP BY BId
HAVING Count(AId) > 1) b ON b.BId = a.BId
的情况下实现。 (我通过创建一个名为.htaccess
的子域名在JustHost中实现了这一点。将其添加到您的mod_proxy
文件中:
*
答案 2 :(得分:0)
我将$_SERVER['DOCUMENT_ROOT']
下的子目录命名为我的子域名,如下所示:
/
var/
www/
html/
.htaccess
subdomain1.domain.com/
subdomain2.domain.com/
subdomain3.domain.com/
其中/var/www/html
代表'DOCUMENT_ROOT'
。然后将以下代码放在.htaccess
文件中:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST}/
RewriteRule (.*) /%{HTTP_HOST}/$1 [L]
它可以作为子目录重定向通配符子域,而无需更改地址栏中的URL。
在vhost旁边,您还可以将子目录放在root之外,并使用 here 所述的别名访问它。然后在该位置添加相同的.htaccess
代码。