标头集 Access-Control-Allow-Origin 不适用于 mod_rewrite + mod_jk

标头集 Access-Control-Allow-Origin 不适用于 mod_rewrite + mod_jk

这是我在 SF 上的第一个问题,所以如果我弄乱了帖子,请原谅我。:)

无论如何,我在我的一台机器上使用 mod_rewrite,并设置了一条重定向到另一台机器上的 webapp 的简单规则。我还在两台机器上设置了标头“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 可能是问题的一部分吗?

答案1

我已经成功使用:

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/

答案2

由于它是一个重定向,您需要“始终设置标头...”,这是由于某些不幸的 Apache 内部原因。只要您不编辑/覆盖现有标头,“始终”是合理的,无需过多担心。

相关内容