mod_rewrite 删除域名的最后一部分,同时保留 URL 的其余部分

问题描述

我使用 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 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 并确保我保持重写的请求相同。但这是另一个问题。这个就解决了。