【问题标题】:Apache: (non)trivial rewrite of subdomainsApache:子域的(非)琐碎重写
【发布时间】:2011-11-17 22:28:03
【问题描述】:

我有一个(至少对我来说)不平凡的任务,一个项目在 Apache2 VHost 上运行。

假设我拥有域“foobar.com”并在我的注册商配置面板中为所有子域创建了一个“通配符”,我希望实现以下目标:

每个发往 'api.foobar.com' 的请求都应该通过。 每个去往 '*.foobar.com' 的请求,其中 * 是一切,但 api 应重写为 'foobar.com'

似乎我无法编写正确的重写条件和规则。有人可以帮忙吗?

谢谢和问候。

菲利克斯

【问题讨论】:

    标签: apache subdomain rewrite


    【解决方案1】:

    你可以这样做。

    RewiteEngine ON
    
    RewriteCond ${HTTP_HOST} !^api\.foobar\.com$
    RewriteCond ${HTTP_HOST} !^foobar\.com$
    RewriteRule ^/?(.*)$ "http\:\/\/foobar\.com\/$1" [R=301,L]
    

    您在此处重定向api.foobar.comfoobar.comfoobar.com 以外的主机的任何URL 到foobar.com

    以上条目附加了 URL,如果不需要,您可以跳过 RewriteRule 指令中的 $1

    更新
    GeorgieF (OP) 建议使用以下正则表达式,它也应该有效:

    RewriteCond ${HTTP_HOST} !^(api\.)?foobar\.com$ [OR]
    RewriteRule ^/?(.*)$ "http\:\/\/foobar\.com\/$1" [R=301,L]
    

    【讨论】:

    • 嘿 danishgoel,谢谢,但这不起作用。我不得不将规则更改为: RewriteRule ^/?(.*)$ "http\:\/\foobar\.com\/$1" [R=301,L] 但现在我有无限的重定向来阻止页面加载。并且 api.foobar.com 也被重定向到 foobar.com。
    • 尝试添加 [OR} 标志,我已经更新了我的答案看看它
    • 这两个问题仍然存在。 api 重定向,然后发生无限重定向。尝试使用 curl 将浏览器排除为错误原因。我认为这应该是一个带有正则表达式的条件:子域必须为空或 api。像 !^(api\.)?foobar.com$
    • 奇怪的是,我自己的 htaccess 文件中有类似的语法,它工作正常。我使用我的域及其 IP 地址并重定向其他所有内容。但是您的正则表达式也应该可以工作。
    • 我已经更新了我的答案看看,也试试我更新的旧正则表达式。
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多