为具有查询字符串的特定 URL 设置 Access-Control-Allow-Origin 标头

为具有查询字符串的特定 URL 设置 Access-Control-Allow-Origin 标头

我尝试了不同的方法/询问谷歌/阅读后,作为最后的手段在这里问这个问题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 具有

访问控制允许来源“*”

...标题也是如此:

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

您可以发现,这样的 URL 与上面一行中的 URL 几乎相同:

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

(可能) 有一个重要的区别 - 那个 (config.json) 不使用查询字符串,而这个 (sources.json) 使用了。

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

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]

...所需的标头出现在响应的标头中,尽管我不希望将标头应用于一切使用这些查询参数,这样做是错误的。

答案1

您可以通过以下条件实现此目的:

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

YMMV,可能需要进行一些调整才能与其他规则配合,但这就是方法。

相关内容