410 Gone是HTTP客户端错误状态码,表示请求资源已被永久删除且无替代地址,服务器直接返回410响应而非重定向或404。

在 Apache 中用 G 标志实现“资源已永久下线”,本质是让服务器对特定 URL 直接返回 HTTP 状态码 410 Gone,向客户端和搜索引擎明确传达“该资源不仅不可访问,而且不会再回来”。这不是重定向,也不是 404,而是一种语义更清晰的主动告知。
确认 mod_rewrite 已启用并允许目录级配置
这是前提,否则任何 RewriteRule 都不会执行:
- 检查
httpd.conf或apache2.conf中是否已启用模块:LoadModule rewrite_module modules/mod_rewrite.so(取消注释) - 确保目标目录(如网站根目录或子目录)的
AllowOverride设置为 All,而非None或FileInfo:AllowOverride All - 若使用虚拟主机,也可直接在
块中设置,比 .htaccess 更高效
正确书写 RewriteRule 并添加 G 标志
G 是一个终止性标志,它会立即中断当前请求处理,并返回 410 状态码。写法简洁,但需注意上下文:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在 .htaccess 文件中(推荐用于站点级精细控制):
RewriteEngine On<br>RewriteRule ^old-product/(\d+)\.html$ - [G]
- 说明:
–^old-product/(\d+)\.html$匹配类似/old-product/123.html的路径(注意:.htaccess 中路径开头不加 /)
–-表示不替换 URI,只触发标志
–[G]表示返回 410 Gone,无需额外状态码参数 - 若在主配置文件(如 httpd.conf 或 VirtualHost 中),路径可带前导
/:RewriteRule ^/legacy-api/.*$ - [G]
配合条件(RewriteCond)做精准拦截
单纯匹配路径有时不够,比如只想对特定来源或参数组合返回 Gone:
- 屏蔽某个已废弃的 API 端点,且仅当携带旧版 token:
RewriteCond %{QUERY_STRING} token=legacy_[a-z0-9]+<br>RewriteRule ^/v1/users$ - [G] - 针对 User-Agent 是爬虫但访问了已删除内容的请求:
RewriteCond %{HTTP_USER_AGENT} Googlebot|Bingbot<br>RewriteRule ^/discontinued-guide\.pdf$ - [G] - 注意:
RewriteCond必须紧邻其后的RewriteRule才生效,且每条规则独立判断
验证与调试要点
410 响应容易被缓存或误判,上线前务必实测:
- 用 curl 检查响应头:
curl -I https://yoursite.com/old-product/123.html
应看到HTTP/1.1 410 Gone,而非 301、404 或 200 - 浏览器地址栏不会跳转,页面显示标准 410 错误页(可自定义
ErrorDocument 410 /410.html) - 避免与
R或L混用:[G]本身已终止流程,加L无意义;加R会冲突,因为G不产生重定向 - Apache 2.4+ 调试日志建议设为:
LogLevel alert rewrite:trace3
查看重写引擎是否匹配到规则










