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

Apache RewriteRule求助:移除?id=查询串后页面404

解决方案

你的规则仅完成了外部重定向(将带?id=的URL跳转到无参数的干净URL),但服务器无法识别新的干净URL对应的内容,因此返回404。需要同时配置内部重写,让服务器能把干净URL映射回原有的参数路由逻辑。

正确的Apache Rewrite配置

RewriteEngine On

# 1. 外部301重定向:移除?id=查询串,跳转至干净URL
RewriteCond %{QUERY_STRING} ^id=([^&]+)$ [NC]
RewriteRule ^news-and-events/news/$ /news-and-events/news/%1? [R=301,L]

# 2. 内部重写:将干净URL转换为带?id=参数的请求,确保服务器能识别
RewriteRule ^news-and-events/news/([^/]+)$ /news-and-events/news/?id=$1 [L]

配置说明

  • 第一步重定向:精准匹配?id=xxx格式的查询串,将xxx部分拼接至原路径末尾,同时移除查询串,返回301状态码告知搜索引擎更新索引。限定路径^news-and-events/news/$避免影响站点其他URL。
  • 第二步内部重写:当用户访问/news-and-events/news/xxx时,服务器内部自动将其转换为/news-and-events/news/?id=xxx的请求,既保留了用户看到的干净URL,又让原页面逻辑能正常加载内容。

其他环境适配(Nginx)

如果使用Nginx服务器,配置逻辑一致但语法不同:

# 外部重定向
rewrite ^/news-and-events/news/$ /news-and-events/news/$arg_id? permanent;

# 内部重写
rewrite ^/news-and-events/news/([^/]+)$ /news-and-events/news/?id=$1 last;

注意事项

  • 测试阶段可先将R=301改为R=302(临时重定向),确认配置无误后再换回301,避免浏览器缓存错误配置。
  • 确保服务器已启用Rewrite模块(Apache的mod_rewrite、Nginx的rewrite模块)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:34:57