【问题标题】:How to configure apache to handle multiple domains with Access-Control-Allow-Origin header?如何配置 apache 以使用 Access-Control-Allow-Origin 标头处理多个域?
【发布时间】:2012-03-17 00:18:57
【问题描述】:

我想将 apache 配置为允许来自多个但不是所有域的 XMLHttpRequest。

这行得通:

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

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

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

但这只会选择第一个域,第二个是不允许的。如何正确指定多个域?

【问题讨论】:

    标签: ajax apache


    【解决方案1】:
    Header always append Access-Control-Allow-Origin: "http://domain1.com"
    Header always append Access-Control-Allow-Origin: "http://domain2.com"
    

    【讨论】:

    • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
    • 这不起作用,因为Access-Control-Allow-Origin 标头只允许一个值。因此,虽然这是为允许多个输入的标头定义多个值的有效方法,但这不是其中一种情况。
    【解决方案2】:

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

    您可以添加多个以 | 分隔的域或者您可以使用正则表达式来配​​置不同的子域或模式。

    【讨论】:

    • 太好了,除了我的只有当我输入Header set而不是Header add时才有效。
    • 如果我错了,请纠正我,但我认为您需要从第二行中删除 $1。有了它,任何通过 https 的请求都会失败,因为 $1 会捕获 https 中的“s”并将其附加到允许的 url 的末尾(因此您最终会得到 .coms)。
    • 我到处都能看到这些 SetEnvIf 解决方案,但没有人解释如何它们的工作原理。
    • 好的,谢谢。在我的 /sites-available/mysite.conf 中工作得很好:D
    • 确认这非常有效,请注意带有端口的 localhost 将端口号关闭,如下所示: SetEnvIfNoCase Origin "https?://(www\.)?(localhost|
    猜你喜欢
    • 2014-01-07
    • 2018-07-18
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 2016-01-11
    相关资源
    最近更新 更多