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

如何在.htaccess中对特定URL设置通配符拦截与精准410重定向

关于.htaccess的两个URL规则问题解答

一、针对特定URL设置通配符拦截规则

通配符拦截本质是借助Apache的mod_rewrite模块,用正则表达式匹配符合模式的URL,再执行拦截动作(比如返回403、重定向等)。我给你举几个实用场景:

1. 拦截某前缀下的所有URL

比如要拦截所有以/old-blog/开头的请求,不管后面跟着什么内容,规则可以这么写:

RewriteEngine On
RewriteRule ^old-blog/.*$ - [F,L]
  • ^old-blog/.*$:正则里^匹配URL起始,old-blog/是固定前缀,.*是通配符(匹配任意字符),$匹配URL结尾,确保整个前缀后的内容都被覆盖
  • [F,L]:F表示返回403 Forbidden(拦截访问),L表示这是最后执行的规则,避免后续规则干扰

2. 拦截包含特定字符串的URL

如果要拦截所有URL里带有malicious-tag的请求,规则可以简化成:

RewriteEngine On
RewriteRule malicious-tag - [F,L]

这里不用加^和$,只要URL中出现这个字符串就会被匹配拦截。

注意点

  • 先确认服务器开启了mod_rewrite模块,不然所有规则都不会生效
  • 规则顺序很关键:范围大的匹配规则要放在后面,防止提前匹配导致其他规则失效

二、精确对https://example.com/shop/设置410重定向,不影响子路径

核心是精准匹配根路径的/shop/,绝对不能让规则覆盖到/shop/anything-else这类子路径。直接用精确正则就能实现:

RewriteEngine On
RewriteRule ^shop/$ - [R=410,L]
  • ^shop/$:^确保从URL开头匹配,shop/是精确路径,$限制到这里结束,这样就只会命中https://example.com/shop/
  • [R=410,L]:R=410表示返回410 Gone状态码(告知浏览器资源已永久移除),L表示停止执行后续规则

为什么不能写^shop/?

如果去掉末尾的$,^shop/会匹配所有以shop/开头的URL,包括/shop/anything-else,这就违背了你不想影响子路径的需求,所以$是关键。

额外补充

如果用户可能访问不带末尾斜杠的https://example.com/shop,可以先统一URL格式再返回410:

RewriteEngine On
# 先把不带斜杠的shop重定向到带斜杠的版本
RewriteRule ^shop$ /shop/ [R=301,L]
# 再对精确路径返回410
RewriteRule ^shop/$ - [R=410,L]

这样不管用户访问哪种格式的shop根路径,都会返回410,而子路径依然正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:36:54