2014-04-19 67 views
0

我打算捕获指向CGI-BIN的url请求,并使用参数和https将它们转发到其他域。来自cgi-bin请求的Apache重定向

例子:

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

+0

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

回答

0

让我们从报价开始从the documentation

在.htaccess文件中使用重写引擎时,每个目录 前缀(对于特定目录总是相同)是 自动为RewriteRule模式匹配和 自动删除在任何亲属之后(不是以斜杠或 协议名称开头)替换会遇到规则集的末尾。请参阅 RewriteBase指令了解有关哪些前缀 将被添加回相对替换的更多信息。

移除的前缀始终以斜线结束,这意味着匹配 发生对抗从未有斜线的字符串。因此,一个 模式与^ /从不匹配每个目录上下文。

此外,匹配的url不包括查询字符串。假设你没有定义一个新的查询字符串,查询字符串会自动结束。

假设你的.htaccess是您的www根,以下规则应该做的伎俩:

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

变化R的标志,以R=301,当且仅当一切正常。永久重定向有时被浏览器缓存,导致意外且无法调试行为。您想在测试时使用临时重定向。