【问题标题】:Apache rewrite based on subdomainApache基于子域的重写
【发布时间】:2010-09-08 03:34:18
【问题描述】:

我正在尝试将通配符域的请求重定向到子目录。
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$

【问题讨论】:

    标签: apache redirect mod-rewrite subdomain wildcard-subdomain


    【解决方案1】:

    您应该查看 apache 文档中的 URL Rewriting Guide

    以下内容未经测试,但应该是诀窍:

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

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

    【讨论】:

    【解决方案2】:

    试试这个:

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

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

    【讨论】:

    • 您的解决方案不会重定向到 blah.domain.com,而只是重写为 something.blah.domain.com/something,这不是我阅读原始问题的方式。
    • 我想如果它们都由同一个 VirtualHost 服务就可以了。特别是,这样做意味着客户端看不到重定向 - 他们仍然看到 something.blah.example.com。
    【解决方案3】:

    @山姆

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

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

    这应该可以解决问题

    【讨论】:

    • 哈!一个字符的错字再次出现:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多