我编写的网站原型使用来自我无法控制的服务器的数据,响应是 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]