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

Apache 2.4通过.conf规则隐藏URL中?id=/并保证页面可访问

解决Apache.conf中WordPress自定义URL移除?id=后404的问题

问题分析

你当前的规则仅完成了外部跳转,但未配置对应的内部重写逻辑,导致跳转后的干净URL无法被WordPress识别,最终返回404。此外原规则存在匹配范围过宽、路径拼接产生双斜杠的问题。

正确的.conf配置规则

需在Apache站点配置文件(如example.com.conf)中,针对WordPress所在的/news-and-events/目录添加以下规则(注意替换为实际服务器文件路径):

<Directory "/var/www/html/news-and-events">
    AllowOverride None
    RewriteEngine On

    # 1. 外部301跳转:将带?id=/xxx的旧URL重定向到干净URL
    # 匹配/news-and-events/news/?id=/xxx 或 /event/?id=/xxx格式的请求
    RewriteCond %{QUERY_STRING} ^id=/(.*)$ [NC]
    RewriteRule ^(news|event)/$ /news-and-events/%1/%2? [R=301,L]

    # 2. 内部重写:将干净URL映射回WordPress能识别的带id参数的请求
    # 把/news-and-events/news/xxx 重写为 /news-and-events/news/?id=/xxx
    RewriteRule ^(news|event)/(.*)$ /news-and-events/%1/?id=/%2 [L]

    # 保留WordPress核心重写规则(确保静态文件和默认路由正常)
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /news-and-events/index.php [L]
</Directory>

规则说明

  1. 外部跳转规则:精准匹配仅包含id=/xxx的查询字符串,将旧URL永久重定向到/news-and-events/news/xxx或/event/xxx格式的干净URL,避免搜索引擎收录重复内容。
  2. 内部重写规则:将用户访问的干净URL在服务器内部转换为原有的带id参数的请求,让WordPress的自定义slug逻辑能正常加载对应内容。
  3. WordPress核心规则:确保静态文件(如CSS、JS)和默认路由不受影响,维持站点基础功能。

注意事项

  • 配置完成后需重启Apache服务生效:sudo systemctl restart apache2
  • 若你的服务器文件路径不同,需将/var/www/html/news-and-events替换为实际的WordPress根目录路径

内容的提问来源于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.27 15:02:07