在重写规则中重用子域

时间:2012-12-27 23:19:21

标签: .htaccess mod-rewrite

我对我的重定向规则感到有些困惑。比起长篇演讲更好的例子就是大丑:

IndexIgnore *
ErrorDocument 404 http://www.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.  [NC]
RewriteRule ^([^\.]+)\.example\.com$ http://example.com/private/$1/public/si.php  [L]

我的目标是获取子域([^\.]+)并在重定向中使用它而不是$1。 例如,test.example.com应重定向到http://example.com/private/test/public/si.php

感谢您的帮助。

此致 S上。

最终工作htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.  [NC]
RewriteCond %{REQUEST_URI} !^/private/
RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC]
RewriteRule ^ /private/%1/public/$1  [R=301,L]

anysub.example.com/anypage重定向到anysub.example.com/private/anysub/public/anypage

2 个答案:

答案 0 :(得分:2)

用于匹配RewriteRule模式的字符串将从不包含主机名,仅包含URI且不包含任何查询字符串。如果要忽略实际的URI是什么,那么RewriteRule中的模式不需要匹配任何内容。您需要使用符号反向引用RewriteCond

中之前的分组
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC]
RewriteRule ^ http://example.com/private/%1/public/si.php [L]

您可以在规则的方括号中添加R=301标记,以使重定向成为永久性。

答案 1 :(得分:1)

尝试重写条件反向引用:

RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC]
RewriteRule ^.*$ http://example.com/private/%1/public/si.php [L]