Apache -重写子域到一个位置


Apache - Rewrite the subdomain to a location?

我很抱歉,我已经尝试了几个小时让这个工作,但我没有取得进展…

我想这样做,如果一个用户在我的网站上输入user.site.com,他们将被带到site.com/user,但URL仍将显示user.site.com。我该怎么做呢?. htaccess吗?服务器文件?

快到了,Ken

RewriteEngine On
RewriteCond %{HTTP_HOST} !www.site.com$ [NC]
RewriteCond %{HTTP_HOST} ^([a-z0-9-_]+).site.com [NC]
RewriteRule (.*) %1/$1 [QSA,L]

%1 = .site.com

$1 =/

后面的值

如果您有test.site.com/foo.php,您将有/test/foo.php。如果你只想测试,那就别管$1了。

QSA =查询字符串L = Last.

你应该在@phihag post中阅读关于mod_rewrite的url

使用mod_rewrite:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.site.com$ [NC]
RewriteCond %{HTTP_HOST} ^([a-z0-9-_]+).site.com [NC]
RewriteRule (.*) %1/$1 [QSA,L]

如果你想链接到资源,要么使用完整的(http://site.com/user/static/x.css)或相对的(static/x.css) url。当此规则生效时,绝对url (/user/static/x.css)需要以不同的方式制作。

要在地址栏中保留原始地址,您需要反向代理而不是重定向。重定向告诉浏览器用不同的地址向服务器发送第二个请求,反向代理告诉服务器找到另一个页面并发送它而不通知浏览器(我相信这是你想要的)。反向代理是通过mod_rewite

中的[P]标志实现的。

确保mod_rewrite, mod_proxymod_proxy_http已加载,并放置指令

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>
RewriteEngine on
RewriteRule ^/(.*) http://site.com/user/$1 [PL]

到您的虚拟主机配置user.site.com或。htaccess如果您没有根权限。这将把所有页面从子域代理到主域文件夹。如果您只想代理索引页,请使用RewriteRule ^/ http://site.com/user代替。

我假设你使用的是http而不是https。