基于子域的Apache重写

基于子域的Apache重写,apache,redirect,mod-rewrite,subdomain,wildcard-subdomain,Apache,Redirect,Mod Rewrite,Subdomain,Wildcard Subdomain,我正在尝试将通配符域的请求重定向到子目录。 例如,something.blah.example.com-->blah.example.com/something 我不知道如何在重写规则中使用子域名 最终解决方案: RewriteCond %{HTTP_HOST} !^blah\.example\.com RewriteCond %{HTTP_HOST} ^([^.]+) RewriteRule ^(.*) /%1/$1 [L] 或者正如皮利夫所指出的那样 RewriteCond %{HTTP_

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

我不知道如何在重写规则中使用子域名

最终解决方案:

RewriteCond %{HTTP_HOST} !^blah\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule ^(.*) /%1/$1 [L]
或者正如皮利夫所指出的那样

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

您应该看看apache文档中的

以下内容未经测试,但应与技巧相符:

RewriteCond %{HTTP_HOST} ^([^.]+)\.blah\.domain\.com$
RewriteRule ^/(.*)$           http://blah.domain.com/%1/$1 [L,R] 
这仅在子域不包含点时有效。否则,您必须在RewriteCond中修改Regexp,以匹配由于锚定而仍然可以工作的任何字符,但这肯定会让您感觉更安全。

尝试以下方法:

RewriteCond %{HTTP_HOST} (.+)\.blah\.domain\.com
RewriteRule ^(.+)$ /%1/$1 [L]
@皮利夫(见评论):好吧,这是真的。我刚刚复制了一个在我的一个项目中使用的.htaccess。我猜它有一个稍微不同的方法:)

@Sam

你的第二行错了。变量的展开是用%而不是$触发的

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

这应该可以解决问题

您的解决方案不会重定向到blah.domain.com,而只是重写到something.blah.domain.com/something,这不是我阅读原始问题的方式。我想,如果它们都由同一虚拟主机提供服务,那就可以了。特别是,这样做意味着客户端看不到重定向-他们仍然看到一些东西。blah.example.com.HA!一个字符的打字错误再次出现:(注意“何时不使用重写”: