.htaccess 将虚拟子域重写到子文件夹并保留原始url

.htaccess 将虚拟子域重写到子文件夹并保留原始url,.htaccess,redirect,subdomain,.htaccess,Redirect,Subdomain,我在网上搜索了几天,但没有找到任何与我的问题相符的答案。这就是我想做的: 我网站上的每个用户都会收到一个类似的个人子域。 当然这是一个虚拟子域 现在,我已经设置了一个通配符DNS a记录,打开mod_rewrite并实现了以下功能: 当某人浏览http://anysubdomain.domain.com时,他们会被重定向到http://www.domain.com/sub/index.php?var=anysubdomain。在index.php中有一个函数,它根据“var”变量(子域的名称)获

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

我网站上的每个用户都会收到一个类似的个人子域。 当然这是一个虚拟子域

现在,我已经设置了一个通配符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]
我希望一切都清楚,如果没有:请询问,我提供更多信息

提前谢谢


Yuri

只要您的所有子域和主域共享相同的文档根,您就可以摆脱
http://www.domain.com
bit来自您的规则:

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]

尽管第一种方法效率要高得多。

我如何让我的所有子域与主域具有相同的文档根?这是当前的结构:/domains/domain.com/htdocs/-main domain-static因为我的子域是虚拟的(静态子域除外),它们实际上没有根(或者我错了吗?)。当我清除.htaccess文件中的“”时,出现一个500内部服务器错误。当我通过添加P标志使用mod_proxy时也是如此。@YuriH很可能您的所有子域都有相同的文档根,如果没有,您需要联系托管服务的支持人员。