如何配置apache以使用Access-Control-Allow-Origin标头处理多个域?

gru*_*cha 16 apache ajax

我想配置apache以允许来自多个域但不是所有域的XMLHttpRequests.

这有效:

Header set Access-Control-Allow-Origin "*"
Run Code Online (Sandbox Code Playgroud)

但它不安全,我想允许我指定的域名,所以经过一些谷歌搜索我得到了这个:

Header set Access-Control-Allow-Origin "http://domain1.com http://domain2.com"
Run Code Online (Sandbox Code Playgroud)

但这只能获得第一个域名,第二个域名不被允许.如何正确指定多个域?

小智 40

您可以在.htaccess文件或vhost文件中使用SetEnvIf(在"目录"组内):

<IfModule mod_headers.c>
   SetEnvIfNoCase Origin "https?://(www\.)?(mydomain\.com|mydomain2\.com)(:\d+)?$" AccessControlAllowOrigin=$0
   Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
</IfModule>
Run Code Online (Sandbox Code Playgroud)

使用此代码,您可以允许访问

  • "mydomain.com"和"mydomain2.com"
  • 有没有"www." 在前
  • 有或没有端口号
  • http或https

您可以添加多个以|分隔的域 或者您可以使用regexp配置不同的子域或模式.

  • 太好了,除了我的工作,如果我把`Header set`而不是`Header add`. (3认同)
  • 如果我错了,请纠正我,但我认为你需要从第二行删除1美元.有了它,任何超过https的请求都会失败,因为$ 1会在https中捕获's'并将其附加到允许的URL的末尾(所以你最终得到.coms). (2认同)