почему setEnvIf Apache не устанавливает корректный заголовок и как отладить его

У меня есть следующее в моем .htaccess файл:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?:\/\/(www\.)?(inreado\.local|testenv\.inreado\.com|inreado\.com)$" AccessControlAllowOrigin=$0$1
    Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
    Header set Access-Control-Allow-Credentials true
</IfModule>

Я пытаюсь установить Access-Control-Allow-Origin заголовок, если хост является одним из трех позволенных доменов, указанных в regexp. Но это никогда не устанавливает этот заголовок. Вот запрос и ответ:

ЗАПРОС

GET http://inreado.local:8080/ HTTP/1.1
Host: inreado.local:8080
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en,en-US;q=0.8,ru;q=0.6

ОТВЕТ

HTTP/1.1 404 Not Found
Date: Sun, 22 Mar 2015 09:44:17 GMT
Server: Apache/2.4.10 (Win64) PHP/5.6.3
X-Powered-By: PHP/5.6.3
Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Credentials: true
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

Я протестировал regexp против http://inreado.local представьте в виде строки здесь, и это должно соответствовать, таким образом, я не понимаю, где проблема.

Обновление

SetEnvIf Origin "http(s)?://(www\.)?(inreado\.local:8080)$" AccessControlAllowOrigin=$1$2
Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
0
задан 22 March 2015 в 17:58
1 ответ

ОБНОВЛЕНИЕ: Очевидно, первое, что нужно сделать, это отправить заголовок Origin в вашем запросе ...

Ваше регулярное выражение "http (s)?: \ / \ / (www \.)? (inreado \ .local | testenv \ .inreado \ .com | inreado \ .com) $ "

Но я считаю, что это совсем не соответствует, потому что вам нужно добавить порт в это регулярное выражение URL (поскольку inreado.local и inreado.local: 8080 являются двумя разными источниками). Таким образом, ваша директива заголовка пропускается, поскольку переменная env не установлена.

Итак:

  • Добавьте соответствующий заголовок Origin в свой запрос.
  • Добавьте порт в ваше регулярное выражение.

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

1
ответ дан 4 December 2019 в 17:00

Теги

Похожие вопросы