Назад | Перейти на главную страницу

Установите заголовок 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-адрес практически идентичен 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]

... желаемый заголовок появляется в заголовках ответа, хотя я не хочу, чтобы заголовок применялся к все который использует эти параметры запроса, это было бы неправильно.

Вы можете сделать это при следующем условии:

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

YMMV и может потребовать некоторых настроек для работы с другими правилами, но это способ.