31

我正在尝试将通配符域的请求重定向到子目录。
IE。something.blah.example.com-->blah.example.com/something

我不知道如何获取要在重写规则中使用的子域名。

最终解决方案:

RewriteCond %{HTTP_HOST} !^blah\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule ^(.*) /%1/$1 [L]

或者正如 pilif 所指出的那样

RewriteCond %{HTTP_HOST} ^([^.]+)\.blah\.example\.com$
4

3 回答 3

36

您应该查看 apache 文档中的URL 重写指南

以下是未经测试的,但它应该是诀窍:

RewriteCond %{HTTP_HOST} ^([^.]+)\.blah\.domain\.com$
RewriteRule ^/(.*)$           http://blah.domain.com/%1/$1 [L,R] 

这仅在子域不包含点时才有效。否则,您必须更改 RewriteCond 中的 Regexp 以匹配由于锚定而仍应工作的任何字符,但这肯定感觉更安全。

于 2008-09-08T11:30:27.947 回答
4

试试这个:

RewriteCond %{HTTP_HOST} (.+)\.blah\.domain\.com
RewriteRule ^(.+)$ /%1/$1 [L]

@pilif(见评论):好的,那是真的。我刚刚复制了一个在我的一个项目中使用的 .htaccess。猜猜它的方法略有不同:)

于 2008-09-08T11:30:58.617 回答
1

@山姆

您的 RewriteCond 行是错误的。变量的扩展是用 % 而不是 $ 触发的。

RewriteCond %{HTTP_HOST} ^([^\.]+)\.media\.xnet\.tk$
            ^

这应该够了吧

于 2008-09-08T14:43:50.573 回答