【发布时间】:2012-08-20 10:03:10
【问题描述】:
我想知道是否可以仅使用 htaccess 代码创建子域, (无需在主机控制面板中设置)
我有一个名为“mobile”的文件夹, 它的位置是这样的:http://www.domain.com/mobile
我希望能够输入http://mobile.domain.com并查看手机文件夹, 这是否可能仅通过在 htaccess 中编写一些代码来实现? 如果是这样,我该怎么做?
谢谢
【问题讨论】:
我想知道是否可以仅使用 htaccess 代码创建子域, (无需在主机控制面板中设置)
我有一个名为“mobile”的文件夹, 它的位置是这样的:http://www.domain.com/mobile
我希望能够输入http://mobile.domain.com并查看手机文件夹, 这是否可能仅通过在 htaccess 中编写一些代码来实现? 如果是这样,我该怎么做?
谢谢
【问题讨论】:
只要将其配置为处理对 *.domain.com 域的所有请求,您就可以执行此操作,然后只需确保将 mobile.domain.com 的 DNS CNAME 设置为 www.domain.com。
如果你知道你想要什么子域,你可以像这样枚举它们(将这些规则放在文档根目录的 htaccess 文件中):
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.) [NC]
RewriteCond %{HTTP_HOST} ^mobile\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/mobile/
RewriteCond %{DOCUMENT_ROOT}/mobile%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/mobile%{REQUEST_URI} -d
RewriteRule ^(.*)$ /mobile/$1 [L]
否则,如果你想随意这样做,它会变得有点复杂:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.) [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$ [NC]
RewriteCond %1:%{REQUEST_URI} !^([^:]+):/\1/
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^(.*)$ /%1/$1 [L]
【讨论】:
取决于您的域的配置。
如果您使用通配符 ServerAlias 设置它们,如下所示:
ServerName example.com
ServerAlias *.example.com
DocumentRoot /var/www/example.com/
请求将进入文件夹,.htaccess 将被评估,使您能够使用 mod_rewrite。但是,如果您不指定 ServerAlias 指令,则请求将永远不会到达该文件夹,因此您将无法对其进行任何操作。
【讨论】: