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

根目录React+子目录WordPress:F5刷新跳转React 404问题求助

问题描述

根目录部署React项目,子目录/mag部署WordPress,目录结构如下:

|_ react
|_ mag

当前根目录.htaccess配置:

<IfModule mod_rewrite.c>
    RewriteEngine On
    Options +FollowSymLinks -MultiViews

    #RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    #RewriteCond %{SERVER_PORT} ^80$
    #RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule . /index.html [L]

    RewriteBase /mag
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule . /index.php [L]

</IfModule>

访问http://example.com/mag时显示React的404页面,强制刷新(Ctrl+F5)可正常加载WordPress,但普通刷新(F5)又回到React 404页面。

问题原因

当前规则中,React的路由规则优先级更高,会先捕获所有非文件/目录/软链接的请求并导向index.html,包括/mag路径下的请求,导致WordPress的规则根本无法触发。强制刷新时浏览器跳过缓存,直接请求服务器能匹配到/mag的实际文件,但普通刷新时浏览器复用缓存的React路由逻辑,或服务器规则顺序问题导致React规则先执行。

解决方案

1. 修改根目录.htaccess规则

调整规则顺序,让/mag路径的请求优先被处理,修正后的配置如下:

<IfModule mod_rewrite.c>
    RewriteEngine On
    Options +FollowSymLinks -MultiViews

    # 优先处理/mag目录的WordPress请求
    RewriteBase /mag
    RewriteRule ^index\.php$ - [L]
    # 精准匹配/mag开头的请求
    RewriteCond %{REQUEST_URI} ^/mag/ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    # 正确指向WordPress入口文件
    RewriteRule . /mag/index.php [L]

    # 再处理根目录的React路由
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule . /index.html [L]

    # 保留原注释的重定向规则(需启用可取消注释)
    #RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    #RewriteCond %{SERVER_PORT} ^80$
    #RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</IfModule>

2. 确认WordPress后台设置

登录WordPress后台,进入「设置」→「常规」:

  • 将「WordPress地址(URL)」和「站点地址(URL)」设置为http://example.com/mag
  • 保存设置,确保WordPress生成的所有链接路径正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:55:22