如何接受具有多个子域的 API 的响应?

如何接受具有多个子域的 API 的响应?

我编写的网站原型使用来自我无法控制的服务器的数据,响应是 JSON 格式的,而服务器不支持 JSONP,因此我在客户端开发时遇到了 CORS 问题。

我设法通过运行本地 apache HTTP 网络服务器并在我的 vhosts.conf 中使用以下 ProxyPass 规则来解决这个问题

ProxyPass /api/de/ http://de.test.com/api/
ProxyPassReverse /api/de/ http://de.test.com/api/
ProxyPass /api/jp/ http://jp.test.com/api/
ProxyPassReverse /api/jp/ http://jp.test.com/api/
ProxyPass /api/ru/ http://ru.test.com/api/
ProxyPassReverse /api/ru/ http://ru.test.com/api/
ProxyPass /api/uk/ http://uk.test.com/api/
ProxyPassReverse /api/uk/ http://uk.test.com/api/

如您所见,同一个域有多个子域,每个子域用于访问不同的语言环境,实际上这意味着我可以获得不同语言的数据,这对我的原型很重要。

我希望在我的原型中测试超过 30 种语言,并且我想知道是否有办法动态编写我的 ProxyPass 规则(或更好的解决方案)。

我使用 jQuery 的 getJSON 方法,我访问的 URL 示例如下

url = '/api/'+pos+'/data.html?destination=...

其中 pos 只是一个字符串,我通过 'de'、'jp'、'ru' 或 'uk' 传递

答案1

您可以使用 mod_rewrite 来实现

RewriteEngine On
RewriteRule /api/([a-z]+)/(.*) http://$1.test.com/api/$2 [P]

mod_rewrite 上的 [P] 使其充当 mod_proxy(来自 apache 文档http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_p):

使用 [P] 标志会导致请求由 mod_proxy 处理,并通过代理请求处理。例如,如果您希望所有图片请求都由后端图片服务器处理,您可以执行以下操作:

重写规则/(.*).(jpg|gif|png)http://images.example.com/$1.$2[P]

相关内容