使用htaccess的子域别名

时间:2012-07-28 11:54:01

标签: .htaccess aliasing

我有这个用于管理子域别名的代码:浏览sub.domain.com它显示了domain.com/fp/sub。

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$
RewriteRule (.*) /fp/sub/$1

我有很多这些子域要设置。有没有办法自动化这个过程放置一些变量而不是正确的子域名/文件夹名称?

我试过这段代码但没有成功

RewriteCond %{HTTP_HOST} ^(sub1|sub2)\.domain\.com$
RewriteRule (.*) /fp/$1/$2

1 个答案:

答案 0 :(得分:1)

Francesco,首先纠正你的例子,规则应该是:

RewriteRule ^(.*) fp/%1/$1         [L]

%变量在上一次成功的cond regexp匹配中设置。

其次有很多选项如果你有权访问系统或vhost配置,例如使用Rewrite Mapsmass virtual hosts。如果您没有此类访问权限仅限于.htaccess,那么您需要使用一个或多个规则,就像您已经在做的那样。一种变体是使用目标目录的存在性检查,例如:

RewriteCond %{HTTP_HOST}            ^(\w+)\.domain\.com$
RewriteCond %{DOCUMENT_ROOT}/fp/%1 -d
RewriteRule (.*)                   fp/%1/$1            [L]

请注意,如果您使用的是共享托管服务,则在重写执行时可能无法正确设置DOCUMENT_ROOT,在这种情况下,您的SHS提供程序将设置环境变量以执行相同操作,例如: %{ENV:DOCUMENT_ROOT_REAL}。做一个phpinfo找出来。有关如何调试此内容的更多建议,请参阅Tips for debugging .htaccess rewrite rules