You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess阻止网站URL中的空格或%20?

阻止含空格或%20的URL访问

嘿,这个问题很容易解决——我们只需要在你的现有重写规则前添加一个条件,拦截任何包含空格(包括URL编码后的%20)的请求即可。

具体修改方案

把你的.htaccess内容改成这样:

RewriteEngine on

# 拦截所有包含空格(解码后的%20)的请求,返回404错误
RewriteCond %{REQUEST_URI} \s
RewriteRule ^ - [R=404,L]

# 你原来的重写规则
RewriteRule ^([a-z]+)/([a-z-]+)/([0-9]+).html$ filecat.php?LANGUAGE=$1&CITY=$2&page=$3 [L]

为什么这样有效?

  • mod_rewrite在处理规则前会自动将URL编码的字符解码,所以%20会被转换成实际的空格字符。
  • %{REQUEST_URI}变量存储了解码后的请求路径,\s是正则表达式中匹配空白字符的元字符(包括空格、制表符等,这里主要针对空格)。
  • 一旦匹配到包含空格的请求,RewriteRule ^ - [R=404,L]会直接返回404错误,并且终止后续规则的处理,彻底阻止这类请求到达你的filecat.php脚本。

可选调整

  • 如果你想返回403禁止访问而不是404,把R=404改成R=403即可。
  • 如果你只想严格拦截CITY部分的空格(而不是整个URL),可以把条件改成针对第二个捕获组,但其实直接拦截整个URL中的空格更符合你的友好URL设计逻辑——毕竟你的规范里CITY应该只包含小写字母和连字符。

额外说明

你提到原有规则也能处理带空格的URL,大概率是因为当重写规则不匹配时,你的服务器配置(比如默认的ErrorDocument或前端控制器)把请求转发到了filecat.php,导致脚本依然接收到了带空格的参数。添加这个拦截条件后,就能从根源上阻止这类不符合规范的请求。

内容的提问来源于stack exchange,提问作者ffalzoabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:54:34