我想为跨域访问标题configurationapache。 我已经尝试了多个组合作为论坛上的线程数build议。 但它不为我工作。
方法,我已经尝试过了:
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"
有了这个设置,它只能select最后一个,而忽略其余的。
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"
有了这个在头上显示了所有三个域名,但字体没有得到拾起火狐。
3.)尝试使用SetEnvIf
,但它又不工作:
SetEnvIf Origin "http(s)?://(www\.)?(mydomain.com|mydomain2.com)$" AccessControlAllowOrigin=$0$1 Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
最后使用“*”,但我不想用这个。
请帮忙。
对于3个域名,在你的.htaccess中:
<Ifmodulee 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 </Ifmodulee>
我已经试过这个,它适用于我。 让我知道如果它不适合你。
除非我误解了手册 ,否则应该是:
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"
手册指出, set
和add
操作的行为如下:
设置: “响应头被设置,用这个名字替换任何以前的头”
加上: “…这可能会导致两个(或更多)具有相同名称的头文件,这可能导致无法预料的后果……”
要限制对某些URI的访问,请查看这些文档:
CrossOriginRequestSecurity
服务器端访问控制#Apache_examples
一个有用的技巧是使用Apache重写,环境变量和头来将Access-Control-Allow- *应用于特定的URI。 例如,这非常有用,可以将跨源请求限制为GET /api(.*).json请求,而不需要凭据:
RewriteRule ^/api(.*)\.json$ /api$1.json [CORS=True] Header set Access-Control-Allow-Origin "*" env=CORS Header set Access-Control-Allow-Methods "GET" env=CORS Header set Access-Control-Allow-Credentials "false" env=CORS
此外,一般来说,根据W3 Wiki – CORS Enabled#For_Apache要公开标题,可以在目录,位置和文件部分或.htaccess文件中添加以下行。
<Ifmodulee mod_headers.c> Header set Access-Control-Allow-Origin "*" </Ifmodulee>
而且,您可以使用add而不是set,但要注意add可以多次添加标题,所以使用set通常更安全。
这在经典ASP中适用于我:
If Request.serverVariables("HTTP_ORIGIN") = "http://domain1.com" Then Response.AddHeader "Access-Control-Allow-Origin","http://domain1.com" ElseIf Request.serverVariables("HTTP_ORIGIN") = "http://domain2.com" Then Response.AddHeader "Access-Control-Allow-Origin","http://domain2.com" 'and so on End If