基于子域的Apache重写

时间:2020-03-05 18:49:17  来源:igfitidea点击:

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

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

最终解决方案:

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

或者如pilif所指出

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

解决方案

回答

我们应该查看apache文档中的《 URL重写指南》。

以下未经测试,但应达到目的:

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

仅在子域不包含点的情况下才有效。否则,我们将不得不在RewriteCond中更改Regexp以匹配由于锚定而仍可以正常工作的任何字符,但这无疑会更安全。

回答

试试这个:

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

@pilif(请参阅评论):好的,是的。我只是复制了一个项目中使用的.htaccess文件。猜猜它有一个稍微不同的方法:)

回答

@山姆

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

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

这应该够了吧