【问题标题】:Apache conf get value from remotehost and set in headerApache conf 从远程主机获取值并在标头中设置
【发布时间】:2013-10-28 09:12:56
【问题描述】:

我有一个要求,我必须从远程主机名中提取值并将其设置在标头中,例如,如果 URL 是这样的 -
http://data1-data2.server.com/someuri

从上面的示例中,需要提取 data1 和 data2 并将其设置在 header 中,即 X-HEADER1=data1 & X-HEADER2=data2。

我最初尝试过 RewriteRule 但发现它只适用于 URI 而不是服务器名

RewriteRule (?<=//)(.*)(?=-) - [E=INFO_REQUEST_CONTEXT_1:$1,NE]
RewriteRule (?<=-)(.*?)(?=[.]) - [E=INFO_REQUEST_CONTEXT_2:$1,NE]
RequestHeader set X-HEADER1 "%{INFO_REQUEST_CONTEXT_1}e"
RequestHeader set X-HEADER2 "%{INFO_REQUEST_CONTEXT_2}e"

什么是正确的配置?

【问题讨论】:

    标签: apache .htaccess httpd.conf


    【解决方案1】:

    以下配置工作,

    # Extract data1 from URL and set the header
    SetEnvIf Host "(.*)(?=-)" var1=$1   
    RequestHeader set X-HEADER1 %{var1}e env=var1
    # Extract data2 from URL and set the header 
    SetEnvIf Host "(?<=-)(.*?)(?=[.])" var2=$1  
    RequestHeader set X-HEADER2 %{var2}e env=var2
    

    【讨论】:

      【解决方案2】:

      启用mod_rewritemod_headershttpd.conf(如果尚未启用),然后将此代码放入您的DOCUMENT_ROOT/.htaccess 文件中:

      RewriteEngine On
      
      # capture REMOTE_HOST components in env variables
      RewriteCond %{REMOTE_HOST} ^([^-]+)\.([^.]+)\.
      RewriteRule ^ - [E=INFO_REQUEST_CONTEXT_1:%1,E=INFO_REQUEST_CONTEXT_2:%2,L]
      
      ## set custom response headers to be used in server side scripts
      RequestHeader set X-HEADER1 "%{INFO_REQUEST_CONTEXT_1}e"
      RequestHeader set X-HEADER2 "%{INFO_REQUEST_CONTEXT_2}e"
      
      ## set custom response headers    
      Header always set X-HEADER1 "%{INFO_REQUEST_CONTEXT_1}e"
      Header always set X-HEADER2 "%{INFO_REQUEST_CONTEXT_2}e"
      

      mod_headers reference

      【讨论】:

      • 这不是要在响应头而不是请求头中设置变量吗?也许这就是问题所在。 :-)
      • 在请求标头已经登陆 Web 服务器后,如何设置/修改请求标头?
      • 不确定是否可以,但我猜RequestHeader 对请求标头进行了处理。我只是不确定这是否就是问题的全部内容。
      • @Qben:你说得对,我做了更多阅读,发现请求标头可以设置为在服务器端脚本中使用。请检查更新的答案。
      • Anubhava,我尝试了 conf 但 %{REMOTE_HOST} 正在返回 IP 地址。请求流程是这样的 - 浏览器 --> BIG IP --> OHS(apache) --> Weblogic。在 weblogic 中部署的应用程序中,我可以在浏览器中看到客户端使用的 URL。另外,分裂是在什么基础上发生的?即这一行 -RewriteRule ^ - [E=INFO_REQUEST_CONTEXT_1:%1,E=INFO_REQUEST_CONTEXT_2:%2,L]
      猜你喜欢
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多