在Apache中使用Access-Control-Allow-Origin标头处理多个域

Kul*_*eep 31 apache .htaccess http cross-domain cors

我想为跨域访问头配置apache.我已经尝试了多个组合,如论坛上的线程数量建议.但它不适合我.

方式,我试过:

1)在不同的行上指定域,如下所示Header set:

Header set Access-Control-Allow-Origin "example1.com"
Header set Access-Control-Allow-Origin "example2.com"
Header set Access-Control-Allow-Origin: "example3.com"
Run Code Online (Sandbox Code Playgroud)

通过这种设置,它只选择最后一个并忽略其余部分.

2)在不同的行上指定域,如下所示Header add:

Header add Access-Control-Allow-Origin "example1.com"
Header add Access-Control-Allow-Origin "example2.com"
Header add Access-Control-Allow-Origin: "example3.com"
Run Code Online (Sandbox Code Playgroud)

有了这个,它在标题中显示了所有三个域,但是在Firefox上没有获取字体.

3.)尝试使用SetEnvIf,但它再次无效:

SetEnvIf Origin "http(s)?://(www\.)?(mydomain.com|mydomain2.com)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Run Code Online (Sandbox Code Playgroud)

最后使用"*",但我不想使用它.

请帮忙.

Geo*_*rge 41

对于3个域,在.htaccess中:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?://(www\.)?(domain1.org|domain2.com|domain3.net)$" AccessControlAllowOrigin=$0$1
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Credentials true
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我试过这个,它对我有用.如果它不适合你,请告诉我.

  • 这是唯一的方法,它通过在服务之前检查主机来动态地仅提供一个值."总是附加"或"添加"对我不起作用. (3认同)
  • 离开"1美元"时,它只适用于我.由于某种原因,"$ 1"被设置为"s",因此它不匹配("domain1.org"与"domain1.orgs"不匹配). (3认同)
  • 对我很有用。我想知道“$0$1”,因为许多其他示例只使用“$0”。当为不同的 Web 服务器重新使用相同的 .htaccess 文件时,它看起来很健壮($0 适用于 Apache)。 (2认同)
  • 错了 它必须是`$ 0`,而不是`$ 0 $ 1`。$ 0 $ 1将匹配的组1附加到URL。这是匹配的组1:`http(s)?`,因此它将为https起源附加`s`,对于HTTP起源附加`undefined`。 (2认同)

Jon*_*Jon 17

除非我误解了手册,否则它应该是:

Header always append Access-Control-Allow-Origin: "example1.com"
Header always append Access-Control-Allow-Origin: "example2.com"
Header always append Access-Control-Allow-Origin: "example3.com"
Run Code Online (Sandbox Code Playgroud)

手册指出setadd操作的行为方式如下:

set: "响应标头已设置,用此名称替换任何以前的标头"

添加: "...这可能导致两个(或更多)标题具有相同的名称.这可能会导致无法预料的后果......"

  • 你不能有多个标题 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed (2认同)