我打算捕获定向到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
答案 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,并且仅当所有内容都按预期工作时。永久重定向有时会被浏览器缓存,从而导致意外和无法调试的行为。您希望在测试时使用临时重定向。