使用 Location proxyPass 将 API 调用从子域重定向到主域

使用 Location proxyPass 将 API 调用从子域重定向到主域

我想将我的 API 调用从子域重定向到主域。我的 API 服务器位于 example.com。请求 URL 是http://foo.example.com/api?service=work&action=all_work,但我的文件系统调用应该能够通过。

<VirtualHost *:80>
    ServerName example.com
    ServerAlias foo.example.com

    RewriteEngine On
    <Proxy *>
            Order Allow,Deny
            Allow from all
    </Proxy>
    <Location /api>
            ProxyPass http://othersite.com/api retry=0
            SetOutputFilter DEFLATE
    </Location>
    DocumentRoot /var/www/example

    RewriteCond %{HTTP_HOST} ^(foo.example.com)$ [NC]
    RewriteCond %{REQUEST_URI} =/
    RewriteRule (.*) /var/www/example/index.html [L]

    RewriteCond %{HTTP_HOST} ^(foo.example.com)$  [NC]
    RewriteCond %{REQUEST_URI} !=/
    RewriteRule  (.*) /var/www/example/$1 [L]

</VirtualHost>

但是我的浏览器出现 404 错误。

答案1

我们可以使用 RewriteCond 和 RewriteRule 对其进行细粒度控制,而不是使用代理传递,并使用 [P] mod_proxy 标志

RewriteCond %{HTTP_HOST} ^(monitor.whatfix.com)$ [NC]
RewriteCond %{REQUEST_URI} =/api
RewriteRule (.*) http://othersite.com/api [P,L]

如果请求来自子域,那么我会将其重写到另一个站点。

相关内容