Apache重定向来自cgi-bin请求

时间:2014-04-19 10:07:05

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

我打算捕获定向到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

1 个答案:

答案 0 :(得分:0)

让我们从the documentation引用:

  

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

  

删除的前缀始终以斜杠结尾,表示匹配   针对从不具有前导斜杠的字符串发生。因此,一个   模式与^ /永远不会在每个目录上下文中匹配。

此外,匹配的网址不包含查询字符串。假设您没有定义新的查询字符串,则会自动监视查询字符串。

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

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

将标记中的R更改为R=301 if,并且仅当所有内容都按预期工作时。永久重定向有时会被浏览器缓存,从而导致意外和无法调试的行为。您希望在测试时使用临时重定向。