我希望使用mod_rewrite阻止任何包含非数字字符或空ID的请求。我在我的
.htaccess
文件中使用了以下规则:RewriteCond %{QUERY_STRING} ID=(\d*[^\d&]+\d*)*(&|$)
RewriteRule .* - [F]
这段代码是有效的,除了包含空格字符的请求,例如。
GET /page.php?ID=5 5 HTTP/1.1
当我使用各种测试套件(如https://regex101.com/)时,[^\d&]+
成功匹配了两个5之间的空格字符,但是这种类型的请求仍然可以通过。
我需要改变什么?
(是的,由于我的PHP处理不正确的用户输入,所以这没有关系。)
%20
在URL中进行编码,你为什么担心这个? - AndreykulID=[0-9]*[^0-9&]
正则表达式。如果不使用%1
/%2
,则无需捕获任何内容。 - Wiktor Stribiżew