我有一个包含多行的.htaccess文件。它没有按预期工作。 Mod_rewrite已启用。 RewriteLogLevel设置为9。 前两条规则禁止使用长度超过80个字符的uris:
RewriteCond %{REQUEST_URI} ^.{80}
RewriteRule .* - [F]
它似乎没有得到评估,因为每个测试网址都通过,它也不会产生错误。 我也尝试过:
RewriteRule .{80} - [F]
但这也没有成功。该过程以404结束,而不是403.
下一条规则也不起作用。它曾经工作过。
RewriteRule ^(\/)?([\w]+)$ /index.php [L]
URI / Contact始终由此index.php处理。 无论我输入什么网址,我都会得到404.我应该得到403或200.不是404.我错过了什么? Apache在所有目录上都具有读取,写入和执行权限,并且在所有文件上具有读写权限。
测试的两个网址是: 127.0.0.4/asssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssddddddddddddddddddddd?p=s&s=psv
和
127.0.0.4/Contact
使用127.0.0.4的别名是体贴的.lb。
答案 0 :(得分:1)
请尝试使用此规则:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+\S{80}
RewriteRule ^ - [F]
使用THE_REQUEST
代替REQUEST_URI
,因为.htaccess中存在其他规则,该变量可能会被覆盖
答案 1 :(得分:0)
最后我找到了解决方案。问题不在于.htaccess的编码。我用以前的版本替换了文件,添加了新的行来测试请求,它运行良好。
这不是一个令人满意的解决方案,因为它可能再次发生,我不知道导致错误的原因。如果有人知道错误,我很想知道可能是什么原因以及如何正确解决。我想更改问题的标签,因为当前标签可能会产生误导(尽管其他人可能会遇到同样的问题,apache如何处理.htaccess文件),但我不知道应该使用哪些标签。