Apache基于子域重写
我正在尝试将对通配符域的请求重定向到子目录。
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$
I'm trying to redirect requests for a wildcard domain to a sub-directory.
ie. something.blah.example.com
--> blah.example.com/something
I don't know how to get the subdomain name to use in the rewrite rule.
Final Solution:
RewriteCond %{HTTP_HOST} !^blah\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule ^(.*) /%1/$1 [L]
Or as pointed out by pilif
RewriteCond %{HTTP_HOST} ^([^.]+)\.blah\.example\.com$
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
@Sam
你的 RewriteCond 行是错误的。 变量的扩展是用 % 触发的,而不是 $。
这应该够了吧
@Sam
your RewriteCond line is wrong. The expansion of the variable is triggered with %, not $.
that should do the trick
试试这个:
@pilif(参见评论):好的,确实如此。 我刚刚复制了在我的一个项目中使用的 .htaccess。 我猜它的方法略有不同:)
Try this:
@pilif (see comment): Okay, that's true. I just copied a .htaccess that I use on one of my projects. Guess it has a slightly different approach :)
您应该查看 URL Rewriting Guide阿帕奇文档。
以下未经测试,但应该能解决问题:
这只在子域不包含点的情况下有效。 否则,您必须更改 RewriteCond 中的正则表达式以匹配由于锚定而仍然有效的任何字符,但这肯定感觉更安全。
You should have a look at the URL Rewriting Guide from the apache documentation.
The following is untested, but it should to the trick:
This only works if the subdomain contains no dots. Otherwise, you'd have to alter the Regexp in RewriteCond to match any character which should still work due to the anchoring, but this certainly feels safer.