1

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

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

现在,我已经设置了通配符 DNS A 记录,打开 mod_rewrite 并实现:

当有人浏览 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]

如果没有,我希望一切都清楚:询问并提供更多信息!

提前致谢!

尤里

4

1 回答 1

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]

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

于 2012-10-14T04:21:56.377 回答