|
Sep
04
|
虽然用vhost可以支持子域名, 但不方便.
RewriteCond $1 !^bbs/
RewriteCond %{HTTP_HOST} bbs.example.com
RewriteRule (.*) /bbs/$1 [L]
RewriteCond $1 !^bbs/ 避免内部无限redirect.
或者支持无限子域名:
RewriteCond %{ENV:Rewrite-Done} !^Yes$
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /%1/$1 [E=Rewrite-Done:Yes,L]
注: Apache mod_rewrite 有一个严重的BUG, 无法获取自己设置的环境变量. 所以上面的代码有问题! 所以还是半自动:
RewriteCond $1 !^bbs/
RewriteCond $1 !^OTHER_SUBDOMAIN/
......
# BUG: RewriteCond %{ENV:Rewrite-Done} !^Yes$
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /%1/$1 [E=Rewrite-Done:Yes,L]
补充: xiaobin 提到可以使用 vhost_alias 模块. 我在他的基础之上做了改进, 结合 mod_rewrite, 可以更好的兼容www子域:
<VirtualHost *:80>
ServerAlias ideawu.net *.ideawu.net
VirtualDocumentRoot /home/work/htdocs/ideawu.net/%1
RewriteEngine On
RewriteCond %{HTTP_HOST} ^ideawu.net$
RewriteRule /(.*) http://www.ideawu.net/$1 [R=301,L]
</VirtualHost>
Related posts:
One Response to “Apache用mod_rewrite配置子域名”
Pages:
Leave a Reply

2011-09-05 at 10:08:42
[...] Apache绑定子域到目录 刚看到一篇《Apache用mod_rewrite配置子域名》,用mod_rewrite来做子域名绑定到目录,我们之前也有尝试过,但是写在conf档里边RewriteEngine On,会与.htaccess中的RewriteEngine On发生处突。后来找到一个很完美的解决方案:mod_vhost_alias [...]