我有这个用于管理子域别名的代码:浏览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
答案 0 :(得分:1)
Francesco,首先纠正你的例子,规则应该是:
RewriteRule ^(.*) fp/%1/$1 [L]
%变量在上一次成功的cond regexp匹配中设置。
其次有很多选项如果你有权访问系统或vhost配置,例如使用Rewrite Maps或mass 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。