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

Набор заголовков Access-Control-Allow-Origin не работает с mod_rewrite + mod_jk

Мой первый вопрос здесь, в SF, поэтому, пожалуйста, простите меня, если мне удастся опубликовать сообщение. :)

В любом случае, я использую mod_rewrite на одной из своих машин с простым правилом, которое перенаправляет на веб-приложение на другой машине. Я также устанавливаю заголовок «Access-Control-Allow-Origin» на обеих машинах. Проблема в том, что когда я нажимаю правило перезаписи, я теряю параметр заголовка Access-Control-Allow-Origin.

Вот пример конфигурации Apache для первой машины:

NameVirtualHost 10.0.0.2:80
<VirtualHost 10.0.0.2:80>
   DocumentRoot /var/www/host.example.com
   ServerName host.example.com
   JkMount /webapp/* jkworker
   Header set Access-Control-Allow-Origin "*"
   RewriteEngine on
   RewriteRule   ^/otherhost  http://otherhost.example.com/webapp [R,L]
</VirtualHost>

А вот пример конфига Apache для второго:

NameVirtualHost 10.0.1.2:80
<VirtualHost 10.0.1.2:80>
   DocumentRoot /var/www/otherhost.example.com
   ServerName otherhost.example.com
   JkMount /webapp/* jkworker
   Header set Access-Control-Allow-Origin "*"
</VirtualHost>

Когда я ударил host.example.com видим, что заголовок установлен:

$ curl -i http://host.example.com/
HTTP/1.1 302 Moved Temporarily
Server: Apache/2.2.11 (FreeBSD) mod_ssl/2.2.11 OpenSSL/0.9.7e-p1 DAV/2 mod_jk/1.2.26
Content-Length: 0
Access-Control-Allow-Origin: *
Content-Type: text/html;charset=ISO-8859-1

И когда я ударил otherhost.example.com мы видим, что он тоже устанавливает заголовок:

$ curl -i http://otherhost.example.com
HTTP/1.1 200 OK
Server: Apache/2.0.46 (Red Hat)
Location: http://otherhost.example.com/index.htm
Content-Length: 0
Access-Control-Allow-Origin: *
Content-Type: text/html;charset=UTF-8

Но когда я пытаюсь применить правило перезаписи в host.example.com/otherhost мы не получаем любви:

$ curl -i http://host.example.com/otherhost/
HTTP/1.1 302 Found
Server: Apache/2.2.11 (FreeBSD) mod_ssl/2.2.11 OpenSSL/0.9.7e-p1 DAV/2 mod_jk/1.2.26
Location: http://otherhost.example.com/
Content-Length: 0
Content-Type: text/html; charset=iso-8859-1

Кто-нибудь может указать, что я здесь делаю не так? Мог ли mod_jk быть частью проблемы?

Успешно использовал:

SetEnvIf Origin "http(s)?://(domaine1\.com|domain2\.com)$" AccessControlAllowOrigin=$0
Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin

из http://www.cameronstokes.com/2010/12/26/cross-origin-resource-sharing-and-apache-httpd/

Поскольку это перенаправление, вам нужно «всегда устанавливать заголовок ...» из-за некоторых неудачных внутренних компонентов Apache. Пока вы не редактируете / не перезаписываете существующий заголовок, "всегда" разумно просто вставить туда без особого беспокойства.