我正在尝试编写两个重写规则,即 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.com
then 模式并将其捕获到 %1 中,并在请求 uri 以 /services/v1/ 开头时应用该规则,在 v1 之后捕获任何内容,(.*)
并将其附加在最后 $1
P 标志表示代理,L 标志表示最后一行