透明重写/通过通配符子域

时间:2011-02-08 23:33:21

标签: apache mod-rewrite apache2 mod-auth-passthrough

我已接近实现目标,但我无法找到解决问题的正确方法。

我为我的通配符子域编写了以下规则:

#remove www.
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/$1 [R=301,L]

#rewrite subdomains to /club/<clubname as defined by subdomain>/<whatever was here before>
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/club/%1/$0 [NC,L]

这非常接近我的要求,即如果我转到http://alpha.domain.com/some/string/here,则网址会被重写为http://domain.com/club/alpha/some/string/here

然而

我希望浏览器中的网址仍然像原始网址

非常感谢提前

编辑:我尝试过将PT添加到最终规则,但这不起作用,我收到400错误

EDIT2 :对于任何有兴趣的人,我放弃了这一行调查,而是使用php来阅读子域中的文字。

1 个答案:

答案 0 :(得分:1)

如果 www.example.com 子域使用与 example.com 域相同的虚拟主机,则可以使用相对路径来使用内部重写:

RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC]
RewriteCond $0 !^club/
RewriteRule ^(.*)$ club/%1/$0 [NC,L]

否则你需要一个代理:

RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/club/%1/$0 [NC,L,P]