【问题标题】:Apache redirect from cgi-bin requests来自 cgi-bin 请求的 Apache 重定向
【发布时间】:2014-04-19 10:07:04
【问题描述】:

我打算捕获指向 CGI-BIN 的 url 请求,并使用参数和 https 将它们转发到不同的域。

例子:

http://example.com/cgi-bin/scrip1.py?name=Hello

https://another.com/cgi-bin/script2.py?name=Hello

由于请求在链接中有 CGI-BIN,mod_rewrite 不起作用:/

RewriteRule ^/cgi-bin/script1.py(.*)$ https://%{HTTP_HOST}/cgi-bin/script2.py$1 [NC,R=301,L]

它适用于非 CGI 请求,但适用于 CGI 请求。我错过了什么吗?

注意:理想情况下,我想捕获 script1.py 之后的参数,并将它们传递给 script2.py

【问题讨论】:

  • RewriteRule ^cgi-bin/script1\.py$ https://another.com/cgi-bin/script2.py [NC,R=301,L,QSA]

标签: apache .htaccess mod-rewrite redirect cgi-bin


【解决方案1】:

让我们从the documentation的引用开始:

在 .htaccess 文件中使用重写引擎时,每个目录 前缀(对于特定目录始终相同)是 自动删除 RewriteRule 模式匹配和 在任何亲戚之后自动添加(不以斜杠或 协议名称)替换遇到规则集的结尾。见 RewriteBase 指令以获取有关将使用什么前缀的更多信息 被添加回相对替换。

去掉的前缀总是以斜杠结尾,表示匹配 发生在一个没有前导斜杠的字符串上。因此,一个 带有 ^/ 的模式在每个目录的上下文中永远不会匹配。

此外,匹配的 url 不包含查询字符串。假设你没有定义新的查询字符串,查询字符串会自动转接。

假设您的 .htaccess 在您的 www-root 中,以下规则应该可以解决问题:

RewriteRule ^cgi-bin/script1.py$ https://%{HTTP_HOST}/cgi-bin/script2.py [NC,R,L]

当且仅当一切都按预期工作时,将标志中的 R 更改为 R=301。永久重定向有时会被浏览器缓存,导致意外且无法调试的行为。您想在测试时使用临时重定向。

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多