在.htaccess中,我检测到'recherche'url参数何时过长,并在这种情况下产生403错误,然后尝试将query_string传输到错误文档。 但是传递查询字符串会创建一个无限循环,我无法避免。
在.htaccess中,我有2套规则:
1)检测错误情况(=检测到过长的搜索字符串):
RewriteCond %{QUERY_STRING} recherche=[^&]{40} [NC]
RewriteRule .* - [R=403,QSA]
2)设置错误文档:
ErrorDocument 403 /spip.php?page=403&%{QUERY_STRING}
这将创建一个无限循环。
当我不将%{QUERY_STRING}传递给错误文档时,就没有更多的无限循环,但是我无法访问错误文档中的query_string。
我已经尝试在错误检测重写器中添加另一个rewritecond,以避免循环:
RewriteCond %{QUERY_STRING} recherche=[^&]{40} [NC]
RewriteCond %{QUERY_STRING} !page=403 [NC]
RewriteRule .* - [R=403,QSA]
它修复了无限循环...但是随后没有403检测了!
我还尝试了[F,QSA]而不是[R = 403]
我希望能够访问错误文档页面中原始的有问题的query_string。