0

我有用于管理子域别名的代码:浏览 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
4

1 回答 1

1

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

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

% 变量在最后一次成功的 cond 正则表达式匹配中设置。

其次,如果您可以访问系统或虚拟主机配置,则有很多选择,例如使用Rewrite Maps大量虚拟主机。如果您没有此类访问权限,仅限于 .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找出来。有关如何调试的更多建议,请参阅调试 .htaccess 重写规则的提示。

于 2012-07-28T15:13:13.677 回答