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

时间:2012-02-27 14:17:42

标签: ajax apache

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

这有效:

Header set Access-Control-Allow-Origin "*"

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

Header set Access-Control-Allow-Origin "http://domain1.com http://domain2.com"

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

2 个答案:

答案 0 :(得分:39)

您可以在.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>

使用此代码,您可以从

进行访问
  • “mydomain.com”和“mydomain2.com”
  • 有或没有“www。”在前面
  • 有或没有端口号
  • http或https

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

答案 1 :(得分:-1)

Header always append Access-Control-Allow-Origin: "http://domain1.com"
Header always append Access-Control-Allow-Origin: "http://domain2.com"