【问题标题】:mod_rewrite to remove last part of domain name while keeping the rest of the URLmod_rewrite 删除域名的最后一部分,同时保留 URL 的其余部分
【发布时间】:2021-04-21 20:31:59
【问题描述】:

我使用 apache2 和 mod_rewrite 作为开发环境的代理服务器。我需要能够重写传入请求,在该请求中删除主机域名的最后一部分。

例子:

原始请求:https://rc.example.com.dev.example.com/some/url

重写请求:https://rc.example.com/some/url

如果有人发送对 rc.example.com.dev.example.com 的请求,我需要能够剥离“.dev.example.com”部分并将 HTTP_HOST 部分重写为https://rc.example.com/some/url

我找到了很多关于如何从主机名开头删除 www 以及如何从主机名末尾删除国家/地区缩写的文章。但是在我发现的示例中,解决方案是在重写的主机名中对域名进行硬编码。我不知道主机名是什么,所以我无法对其进行硬编码。我只知道要从主机名末尾删除的内容是“.dev.example.com”

我确定有一种方法可以使用变量来捕获主机名并删除“.dev.example.com”部分,但我还没有找到这方面的示例。

【问题讨论】:

  • 你希望这个有什么效果?您是否需要编辑后的主机名对应用程序可见,例如在环境变量中?还是需要基于它加载其他的 Apache 配置?或者您想重定向用户的浏览器以请求新的 URL?另外,您能否展示一些您发现的看起来很接近但不是您想要的示例?
  • 我希望 apache 服务器将原始请求转发到位于 rc.example.com(或任何域)的目标服务器,并将回复返回给原始请求者。 apache 服务器充当代理。 apache 代理查看传入请求中的主机名并剥离主机名的代理部分,然后在目标主机上转发请求。我的代理是主机是 dev.example.com,如果传入的请求是针对 some-other-internal-domain.com.dev.example.com 然后 mod_rewrite 将其重写为 some-other-internal-domain.com/some/url 现在获取链接。
  • 现在我找不到那个人想要从 http_host 中删除 .br 国家/地区代码的 stackoverflow 帖子。那篇文章展示了如何删除 .br 部分但保留其余部分,但其余部分是硬编码的。好的,我又找到了:stackoverflow.com/questions/5970945/…
  • 这里是显示如何删除 http_host 开头的 www 但也是硬编码的帖子:a2hosting.com/kb/developer-corner/apache-web-server/…

标签: apache mod-rewrite


【解决方案1】:

这篇文章为我提供了答案:

apache mod_rewrite rule parse or split subdomain to find virtual host entry

我能够拼凑起来:

RewriteCond %{HTTP_HOST} ^(.+)+[\.]dev[\.]example[\.]com [NC]

RewriteRule (.*)$ https://%1$1 [P]    

我对此进行了测试,它可以工作。现在我只需要弄清楚如何确定原始请求是 http 还是 https 并确保我保持重写的请求相同。但这是另一个问题。这个解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2013-06-03
    • 2023-03-10
    相关资源
    最近更新 更多