apache mod_rewrite 场景子域名从 http_host 捕获并在重写时将其作为子域名传递给其他 url

apache mod_rewrite 场景子域名从 http_host 捕获并在重写时将其作为子域名传递给其他 url

我正在尝试编写两个重写规则,即 PASS THROUGH 或 PROXY,以便我可以隐藏底层 url。

情况1:

当请求到达 app.domain.com/folder1/folder2/ 时,它应该经过 abmydomain.com/folder1/folder2/,并且 app.domain.com/folder1/folder2/ 中 folder2 之后的任何内容都应添加到文件夹 2 之后的 abmydomain.com/folder1/folder2/ 中。

示例 app.domain.dom/folder1/folder2/search/?q=test 应通过 abmydomain.com/folder1/folder2/search/?q=test 传递

案例2:

当请求到达 company1.app.domain.com/folder1/folder2/ 时,它应该通过 company1.abmydomain.com/folder1/folder2/

这个 company1 可能会变化,我应该能够动态地获取它并附加到第二个 url。

company1.app.domain.com/folder1/folder2/ 中 folder2 后面的任何内容都应添加到 company1.abmydomain.com/folder1/folder2/ 文件夹 2 之后。

例子

company1.app.domain.com/folder1/folder2/search/?q=test 应通过 company1.abmydomain.com/folder1/folder2/search/?q=test 传递

我尝试写以下内容:

一条规则:

RewriteRule ^([A-Za-z0-9-]+).app.domain.com\/folder1\/folder2\/$  http://%1.a.b.mydomain.com/folder1/folder2/$1 [PT]

我尝试了另一个

RewriteCond %{HTTP_HOST} ^([a-z0-9]+).app.domain.com
RewriteRule ^services/v1/(.*) http://%1.a.b.xyz.com/services/v1/$1 [P]

不知为何这两次尝试都没有成功,请帮帮我,谢谢

答案1

以下规则解决了这个问题

情况1:

RewriteCond %{HTTP_HOST} ^app.domain.com$
RewriteRule ^/services/v1/(.*)$ http://a.b.xyz.com/services/v1/$1 [P,L]

上述规则检查条件 http_host == app.domain.com,然后请求 uri 中的模式以 /services/v1/ 开头,在 v1 之后,任何以 (.*) 捕获的内容都会附加在最后 $1

案例 2:

RewriteCond %{HTTP_HOST} (.*)\.app.domain.com$
RewriteRule ^/services/v1/(.*)$ http://%1.a.b.xyz.com/services/v1/$1 [P,L]

上述规则检查条件 http_host == *. app.domain.comthen 模式并将其捕获到 %1 中,并在请求 uri 以 /services/v1/ 开头时应用该规则,在 v1 之后捕获任何内容,(.*)并将其附加在最后 $1

P 标志表示代理,L 标志表示最后一行

相关内容