如何仅在查询时重定向到 CGI?

如何仅在查询时重定向到 CGI?

我正在用静态 index.html 页面替换 gitweb 的 index.cgi。

但是我不希望 gitweb 存储库的链接中断,例如http://example.com/?p=foobar;

我不工作的 .htaccess 目前看起来像:

DirectoryIndex index.html index.php
RewriteCond %{QUERY_STRING} p
RewriteRule ^/ /index.cgi

我错过了什么?

答案1

根据我的阅读重写规则文档(“匹配的内容?”框),如果您的 RewriteRule 位于目录部分或 .htaccess 文件中,则前导/将被删除,因此规则中的模式将不匹配。您可以尝试用 替换模式^,即

RewriteRule ^ /index.cgi

答案2

有了该规则,您将永远无法访问 index.html 页面,因为重定向将匹配任何内容。

你需要做一些类似的事情

RewriteCond %{QUERY_STRING}      ^$
RewriteRule ^/                   /index.html [L]
RewriteRule ^/                   /index.cgi

其结果应该类似于'如果您没有查询字符串,请转到 index.html,否则请转到 index.cgi 并传递其余字符串!

答案3

它将匹配任何不是 index.cgi 或 index.html 的 URI,并且以查询字符串并将其重写到您的 cgi。

RewriteCond %{QUERY_STRING} ^p
RewriteRule !(index.cgi|index.html) /index.cgi [L]

L 选项意味着 Apache 停止处理重写规则。

相关内容