Apache基于子域的重写
Posted
技术标签:
【中文标题】Apache基于子域的重写【英文标题】:Apache rewrite based on subdomain 【发布时间】: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$
【问题讨论】:
【参考方案1】:您应该查看 apache 文档中的 URL Rewriting Guide。
以下内容未经测试,但应该是诀窍:
RewriteCond %HTTP_HOST ^([^.]+)\.blah\.domain\.com$
RewriteRule ^/(.*)$ http://blah.domain.com/%1/$1 [L,R]
这仅适用于子域不包含点的情况。否则,您必须更改 RewriteCond 中的 Regexp 以匹配由于锚定而仍应工作的任何字符,但这肯定感觉更安全。
【讨论】:
注意“何时不使用 Rewrite”:httpd.apache.org/docs/2.2/rewrite/avoid.html#redirect【参考方案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$
^
这应该可以解决问题
【讨论】:
哈!一个字符的错字再次出现:(以上是关于Apache基于子域的重写的主要内容,如果未能解决你的问题,请参考以下文章
Apache 重写:如何避免在省略 url 结尾斜杠时显示 url 参数?