AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 49638
In Process
Guillaume
Guillaume
Asked: 2009-08-05 00:10:35 +0800 CST2009-08-05 00:10:35 +0800 CST 2009-08-05 00:10:35 +0800 CST

Apache2 - mod_rewrite:RequestHeader 和环境变量

  • 772

我尝试获取请求参数“授权”的值并将其存储在请求的标题“授权”中。

第一个重写规则工作正常。在第二个重写规则中,$2 的值似乎没有存储在环境变量中。因此,请求标头“授权”为空。

任何想法 ?谢谢。

<VirtualHost *:8010>
  RewriteLog "/var/apache2/logs/rewrite.log"
  RewriteLogLevel 9
  RewriteEngine On
  RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [L,P]
  RewriteRule ^/(.*)&authorization=@(.*)@(.*) - [E=AUTHORIZATION:$2,NE]
  RequestHeader add "Authorization" "%{AUTHORIZATION}e"
</VirtualHost>

我需要处理几种情况,因为有时参数在路径中,而在某些情况下它们在查询中。取决于用户。最后一个案例失败了。AUTHORIZATION 的标头值看起来是空的。

# if the query string includes the authorization parameter
RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
# keep the value of the parameter in the AUTHORIZATION variable and redirect
RewriteRule ^/(.*) http://<ip>:<port>/ [E=AUTHORIZATION:%2,NE,L,P]
# add the value of AUTHORIZATION  in the header
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
apache-2.2 mod-rewrite requestheader
  • 3 3 个回答
  • 13968 Views

3 个回答

  • Voted
  1. CK.
    2009-08-05T00:30:34+08:002009-08-05T00:30:34+08:00

    看起来你在第一条规则上有'L'(最后一个)标志。规则处理将在那里停止,不再发生重写。我认为永远不会达到第二条规则。尝试删除“L”标志。

    编辑

    哦,你也设置了“P”(代理)标志。这也将在此时停止重写规则处理并通过 mod_proxy 强制代理请求。

    您可以在一个规则中完成所有操作,因为模式匹配是相同的。我不完全确定你在追求什么,但这可能会做到:

    RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [E=AUTHORIZATION:$2,NE,L,P]
    

    更新

    啊哈,我想我明白你现在要做什么了。只要您在标志中指定 [P],代理请求就会在此时发生。如果我正确阅读了问题,您希望将 AUTHORIZATION var 传递给该请求,因此您需要将其放在 [P] 之前:

    # if the query string includes the authorization parameter
    RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
    RewriteRule ^/(.*) - [E=AUTHORIZATION:%2]
    # add the value of AUTHORIZATION  in the header
    RequestHeader add "Authorization" "%{AUTHORIZATION}e"
    # keep the value of the parameter in the AUTHORIZATION variable and redirect
    RewriteRule ^/(.*) http://<ip>:<port>/ [NE,L,P]
    

    完全未经测试,但应该做你想做的 - 如果我正确理解这个问题。

    Apache 配置更新

    您是否在 httpd.conf 中为该目录设置了 AllowOverride FileInfo?如果没有,那么您将无法在 .htaccess 中使用 RequestHeader

    • 2
  2. markdrayton
    2009-08-06T12:54:17+08:002009-08-06T12:54:17+08:00

    我怀疑您要么无法覆盖Authorization标头,要么它在请求过程的后期被破坏。我相信您知道,Authorization:它用于HTTP 基本身份验证,因此很有可能其他东西在欺骗它。您可以使用不同名称的标题吗?

    • 0
  3. pjmorse
    2013-01-04T07:01:47+08:002013-01-04T07:01:47+08:00

    你有没有理由使用mod_rewrite这个而不是mod_setenvif?

    http://httpd.apache.org/docs/current/mod/mod_setenvif.html#setenvif

    • 0

相关问题

  • 阿帕奇的替代品

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve