为具有查询string的特定URL设置Access-Control-Allow-Origin Header

我试图在这里作为最后的手段尝试不同的事情/要求谷歌/阅读http://httpd.apache.org/docs/2.2/

我在我的apache2.conf中有以下内容

# Allow cross domain fonts RewriteCond %{REQUEST_URI} (ttf|otf|eot|woff|svg) [OR] RewriteCond %{QUERY_STRING} (ttf|otf|eot|woff|svg) RewriteRule .* - [E=crossdomain:true] # Cross domain videoplayer config RewriteRule ^/video/player/config.json - [E=crossdomain:1] # Cross domain for fragments RewriteCond %{QUERY_STRING} fragment=true RewriteRule .* - [E=crossdomain:1] # Set header Header set Access-Control-Allow-Origin "*" ENV=crossdomain 

所有这一切都很好。 现在,我想要的URL如下所示

Access-Control-Allow-Origin“*”

…标题也是:

 /video/player/sources.json?contentId=AVID20150102_0012&width=640&height=360 

正如你所看到的,这样一个URL几乎和上面一行中的一样:

 RewriteRule ^/video/player/config.json - [E=crossdomain:1] 

与(也许)一个重要的区别 – 一个(config.json)不使用查询string和这个(sources.json)。

我尝试添加不同的规则,以便将“crossdomain”环境variables应用于sources.jsonurl,但没有成功。 例如:

 RewriteCond %{REQUEST_URI} ^/video/player/sources.json [NC] RewriteCond %{QUERY_STRING} ^contentId=(.*)&width=(.*)&height=(.*) RewriteRule .* - [E=crossdomain:1] 

我认为其实应该是正确的(但是因为它不能工作,所以我错了)。

认为这个问题可能与%{REQUEST_URI}有某种关系,因为当我使用这个时:

 RewriteCond %{QUERY_STRING} contentId RewriteCond %{QUERY_STRING} width RewriteCond %{QUERY_STRING} height RewriteRule .* - [E=crossdomain:1] 

…所需的头文件出现在响应的头文件中,但是我不希望将头文件应用于使用这些查询参数的所有东西 ,这将是一个错误的事情。

您可以通过以下条件来完成此操作:

 RewriteCond %{REQUEST_URI} ^/video/player/sources.json$ RewriteCond %{QUERY_STRING} !="" RewriteRule . - [E=crossdomain:1] 

YMMV,并可能需要一些调整,以处理另一个规则,但这是方式。