将虚拟子域重写为子文件夹并保留原始URL

时间:2012-10-13 12:51:07

标签: .htaccess redirect subdomain

我在网上搜索了几天,但我没有找到任何回答我的问题。这就是我想要做的事情:

我网站上的每个用户都会收到像http://username.domain.com这样的个人子域名。 当然,这是一个虚拟子域名。

现在,我已经设置了一个通配符DNS A记录,将mod_rewrite设置为ON并实现了这样做:

当有人浏览http:// anysubdomain.domain.com时,他们会被重定向到http:// www.domain.com/sub/index.php?var=anysubdomain。在index.php中有一个函数可以根据'var'变量(子域名)获取唯一信息。

我想要做的是当有人冲浪到http:// anysubdomain.domain.com时,他被重定向到http:// www.domain.com/sub/index.php?var=anysubdomain(就像现在一样) )但原始URL(http:// anysubdomain.domain.com)保留在浏览器栏中。所以看起来每个用户都有自己的子域名。

这是我目前使用的htaccess文件:

RewriteEngine On 
Options +FollowSymlinks 


RewriteCond %{HTTP_HOST} !^www\.domain\.com
RewriteCond %{HTTP_HOST} !^static\.domain\.com
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)\.domain.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/sub/index.php?username=%2 [L]

我希望一切都清楚,如果不是:请问我提供更多信息!

提前致谢!

由里

1 个答案:

答案 0 :(得分:0)

只要您的所有子域和您的主域共享相同的文档根目录,您就可以从规则中删除http://www.domain.com位:

RewriteCond %{HTTP_HOST} !^www\.domain\.com
RewriteCond %{HTTP_HOST} !^static\.domain\.com
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)\.domain.com$ [NC] 
RewriteRule ^(.*)$ /sub/index.php?username=%2 [L]

否则,您需要通过添加P标志来使用mod_proxy:

RewriteCond %{HTTP_HOST} !^www\.domain\.com
RewriteCond %{HTTP_HOST} !^static\.domain\.com
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)\.domain.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/sub/index.php?username=%2 [L,P]

虽然第一种方式会更有效率。