Установите заголовок Access-Control-Allow-Origin для определенного URL-адреса со строкой запроса

Я спрашиваю это здесь в качестве крайней меры после попытки разных вещей / спрашивая Google / чтение 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) не использует строки запроса, а этот (sources.json) делает.

Я попытался добавить другие правила, чтобы применить переменную среды "crossdomain" к URL-адресу sources.json, но безуспешно. Например:

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 и может потребоваться некоторые настройки для работы с другими правилами, но это так.

Другие вопросы по тегам