【发布时间】:2010-09-01 05:44:42
【问题描述】:
是否可以使用 htaccess 为每个用户创建动态子域。例如,如果有一个用户名为 myusername 的用户,则为他添加一个子域,如 htttp://www.myusername.example.com,当有人加载此页面时,它应该为 http://www.example.com/?user=myusername(使用 htaccess)
【问题讨论】:
是否可以使用 htaccess 为每个用户创建动态子域。例如,如果有一个用户名为 myusername 的用户,则为他添加一个子域,如 htttp://www.myusername.example.com,当有人加载此页面时,它应该为 http://www.example.com/?user=myusername(使用 htaccess)
【问题讨论】:
您必须先调整您的服务器软件。
?user=myusername 是主机 www.example.com
上的路径
而 www.myusername.example.com 是另一个主机
浏览器必须知道应该为 www.myusername.example.com 域调用哪个 IP 地址。
因此,首先您必须设置 DNS 记录,以使所有子域成为主域的别名。
接下来,您必须设置您的网络服务器软件以接受所有子域。
最后,您可以处理任何子域请求。不涉及 .htaccess。
有关详细信息 - 请参阅之前在 SO 上回答的许多相同问题。
【讨论】:
是的,有可能!
你可以这样使用:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC]
RewriteRule . http://example\.com/?user=%2/ [L]
</IfModule>
确保 *.example.com 设置为指向 example.com 的服务器。 (您需要为其创建一个名称记录。您必须使用“通配符子域”,如“balupton”所指)
【讨论】:
$_GET['user']=strtok($_SERVER['HTTP_HOST'],"."); 中,它将起作用。工作得更好,因为子域将保留在地址栏中
我不相信您可以在 .htaccess 文件中执行此操作。您所描述的是配置多个Virtual Hosts 以由给定的Apache 实例提供服务。虚拟主机必须在 Apache 服务器配置文件中配置,而不是在 .htaccess 文件中。请参阅文档。
【讨论】:
您可以使用 .htaccess 文件部分完成此操作,但某些配置必须在 httpd.conf 级别完成。基本上,它看起来像这样:
a) 将您的域配置为该区域的通配符 dns。如何执行此操作的具体细节取决于您的 DNS 提供商是谁,或者您正在运行哪个 BIND 软件。但基本上进行设置,以便 *.example.com 指向您的服务器地址。
b) 像这样配置网络服务器:
<VirtualHost x.x.x.x:80>
ServerName *.example.com
...
</VirtualHost>
<VirtualHost x.x.x.x:80>
Server some.fixed.subdomain.example.com
...
</VirtualHost>
确保在通配符条目之后列出所有非动态域,否则很可能无法正常工作。 Apache 对它的设置顺序相当挑剔。
使用此设置,无需将请求重写为查询。您可以让您的脚本检查 $_SERVER['HTTP_HOST'] 以确定正在为哪个虚拟子域提供服务并从那里开始工作。
【讨论】:
您所追求的功能称为Wildcard Subdomains。它允许您不必为每个子域设置 DNS,而是使用 apache 重写进行重定向。你可以找到一个很好的教程here,但是那里有成千上万的教程。以下是该教程中的必要代码:
<VirtualHost 111.22.33.55>
DocumentRoot /www/subdomain
ServerName www.domain.tld
ServerAlias *.domain.tld
</VirtualHost>
但是,由于它需要使用 VirtualHosts,因此必须在服务器的 httpd.conf 文件中进行设置,而不是在本地 .htaccess 中设置。
【讨论】: