我正在创建一个 html5 - JavaScript 应用程序(用于移动设备,使用 PhoneGap)。我必须与 REST 服务交互。
服务现在运行在 "http://localhost:8080/backend/mvc/"
我正在 wamp 服务器 (apache2) 上开发我的应用程序 (http://localhost/stage/
)
我使用的是 Chrome 浏览器。
当执行 ajax 调用时,浏览器响应:XMLHttpRequest 无法加载 http://localhost:8080/backend/mvc/event。 Access-Control-Allow-Origin 不允许来源 http://localhost。
所以我找到了几种方法来规避这个跨域ajax调用问题:
1) 启动 chrome chrome.exe --disable-web-security
=> 没有区别
2) 使用 mod_proxy 配置 apache 以重定向流量。
我在 httpd.conf 中启用了:
proxy_module
proxy_connect_module
proxy_http_module
我在 www 根目录下放了一个 .htaccess
文件,内容如下:
# start mod_rewrite
RewriteEngine On
ProxyRequests off
<Proxy>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /EMBackend/ http://localhost:8080/backend/mvc/
ProxyPassReverse /EMBackend/ http://localhost:8080/backend/mvc/
RewriteRule ^/EMBackend/(.*)$ /backend/mvc/$1 [R]
我重新启动了所有服务(apache、php、..)
导致错误500
apache 错误日志:[Tue Oct 18 14:30:11 2011] [alert] [client 127.0.0.1] C:/wamp/www/.htaccess: ProxyRequests not allowed here
/p>
关于如何解决这个问题的任何线索?
最佳答案
我找到了一个可行的解决方案:
启用:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
将其放在配置的主要部分(或所需的虚拟主机,如果使用 Apache 虚拟主机):
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /EMBackend http://localhost:8080/backend/mvc
ProxyPassReverse /EMBackend http://localhost:8080/backend/mvc
<Location /EMBackend>
Order allow,deny
Allow from all
</Location>
所以我想我不能把它放在 .htaccess
中,或者我必须设置 ProxyPreserveHost On
。我将 Include conf/extra/
放入 httpd.conf
文件并创建了 httpd-proxy.conf
文件并将上面的脚本放入其中.重新启动 apache,它正在工作!
关于javascript - apache mod_proxy,为跨域ajax调用配置ProxyPass和ProxyPassReverse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7807600/