【问题标题】:Set Apache headers conditionally有条件地设置 Apache 标头
【发布时间】:2014-02-11 19:13:28
【问题描述】:

我正在使用 apache 服务器,我想有条件地添加标头。

如果 URI 匹配某个正则表达式,我想添加标题 Access-Control-Allow-Origin: *。有什么好的方法可以做到这一点?

到目前为止我已经尝试过:

  1. 我添加了由请求处理程序调用的代码,使用 apr_table_add(rq->headers_out, "Access-Control-Allow-Origin", "*")。但是,只要还设置了标头Content-Type: application/x-javascript,Apache 似乎就会在发送响应之前剥离标头。这是错误的方法吗?为什么 Apache 会剥离标头?

  2. 我听说过 mod_headers 建议。 mod_headers 是否能够根据与请求 URI 匹配的正则表达式放置标头?

【问题讨论】:

  • 你是怎么解决这个问题的,你说你得到了一些同事的帮助?请您发布答案或@akond 作品的答案吗?
  • @akond 的回答奏效了。

标签: apache http-headers cors mod-headers


【解决方案1】:
SetEnvIf Request_URI somepartofurl SIGN
Header always add "Access-Control-Allow-Origin" "*" env=SIGN

但这仅在位于配置中时才有效。将其放入 .htaccess 将无济于事。

【讨论】:

  • 你能解释一下这段代码在做什么(语法,它是如何工作的)吗?当您说“位于配置中”时,您是指在 httpd.conf 中吗?我不认为我的模块有一个。我将如何设置它?
  • 在同事的帮助下解决了这个问题。谢谢!
  • SetEnvIf 和 Header 指令不仅限于位于配置文件中,它们在目录上下文中完美地工作,也在 .htaccess 文件中。与接受的答案中所述相反。
【解决方案2】:

这也应该有效(需要 mod_rewrite):

RewriteRule ^/en/foo.*$ - [ENV=SET_ACAO:true]
Header set "Access-Control-Allow-Origin" "*" env=SET_ACAO

其中^/en/foo.*$ 与请求 URL 匹配的正则表达式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多