我为127.0.0.1
添加了虚拟主机abc.local
- Angular应用程序正在
localhost:4000
上运行 localhost:80
上的PHP APIlocalhost:4060
上的节点1 APIlocalhost:3001
上的节点2 API
PHP文件位于**/admin/webp文件夹中,节点文件分别位于/admin/webp/v2和/admin/webp/v1文件夹中。
下面是.htaccess**文件
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding, X-Auth-Token, content-type"
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^abc.local$
RewriteRule ^admin/webp/v2/(.*)$ http://localhost:4060/$1 [L,R=301]
RewriteRule ^admin/webp/v1/(.*)$ http://localhost:3001/v1/$1 [L]
</IfModule>
所有重写规则都正常工作。例如,对abc.local/webp/v2/users
的所有调用都被重定向到localhost:4060/users
。
但是,浏览器因规则而抛出CORS错误RewriteRule ^admin/webp/v2/(.*)$ http://localhost:4060/$1 [L,R=301]
Apache服务器使用301重定向响应节点应用程序的OPTIONS请求(浏览器需要200)。是否有解决方法?
2条答案
按热度按时间pu82cl6c1#
如果有人遇到同样的问题,只需将
[L,R=301]
替换为[L,P]
(请求被视为代理而不是重定向)。wyyhbhjk2#
(Your问题缺少一些细节,因此如果我做了错误的假设,请原谅我。)
如果您的应用要向
http://abc.local/admin/webp/v2/users
发出跨源请求,则类似Content-Type: application/json
的请求标头将导致浏览器首先发出preflight request因
Apache服务器使用重定向响应此OPTIONS请求
为了防止这种情况,您可以扩展
RewriteCond
,以便它将OPTIONS请求排除在重写之外,并使用200 OK响应它们。