我正在用静态 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 停止处理重写规则。