WordPress从Windows XAMPP迁移至Ubuntu Apache2后固定链接失效
故障根因
同一份WordPress代码在Windows XAMPP环境运行正常、迁移到Ubuntu Apache环境后出现自定义固定链接404、保存文章提示「更新失败。响应不是有效的JSON响应」,核心原因是Ubuntu默认Apache配置未开启URL重写支持,站点根目录下.htaccess中配置的WordPress重写规则完全不生效。
Windows平台XAMPP默认预开启了重写模块、放开了目录配置覆盖权限,因此不需要额外调整即可正常使用自定义固定链接;Ubuntu版Apache2出于安全考虑默认加了两层限制:一是rewrite模块默认未启用,二是默认禁止站点目录下的.htaccess文件覆盖主配置,因此仅重置.htaccess、反复调整固定链接设置无法解决问题。
分步修复操作
所有操作均在Ubuntu服务器终端执行,操作前请将命令中的路径替换为你实际的WordPress站点根目录绝对路径。
- 启用Apache2重写模块
执行以下命令启用mod_rewrite模块:sudo a2enmod rewrite - 修改Apache站点配置,允许.htaccess规则生效
默认站点配置文件路径为/etc/apache2/sites-available/000-default.conf,如果你配置了独立虚拟主机,请修改对应站点的配置文件。找到配置中对应站点根目录的<Directory>段,将段内的AllowOverride None修改为AllowOverride All,修改完成后的配置段参考如下:<Directory /var/www/your-wordpress-root> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> - 修正站点目录权限
Ubuntu下Apache2默认运行用户为www-data,需要给该用户分配站点目录的读取权限,避免权限不足导致规则读取失败:
注意不要给目录设置777权限,会触发严重安全风险sudo chown -R www-data:www-data /var/www/your-wordpress-root sudo chmod -R 755 /var/www/your-wordpress-root - 重启Apache2服务让所有配置生效
执行命令重启服务:sudo systemctl restart apache2 - 刷新WordPress重写规则
回到WordPress后台,进入「设置-固定链接」页面,不需要修改任何已有配置,直接拉到页面底部点击「保存更改」,即可重新刷新生效重写规则。
异常兜底排查
完成上述操作后如果故障仍存在,按以下顺序排查:
- 检查站点根目录下.htaccess文件是否存在、权限是否正常,WordPress默认生成的固定链接重写规则内容应为:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress - 临时禁用所有插件、切换为WordPress官方默认主题测试,排除WP Rocket、Wordfence这类带缓存/安全防护功能的插件写入的额外.htaccess规则冲突问题。
- 优先在服务器本地用curl命令测试自定义固定链接的返回状态,确认服务端配置正常后,再排查CDN缓存、本地DNS缓存、浏览器缓存导致的访问异常。
当前使用的MentalPress WP Theme、列出的18个已启用插件均不是该故障的核心诱因,同份代码跨环境运行异常时,优先排查Web服务器的环境配置差异,不需要优先调整程序端内容。
内容的提问来源于stack exchange,提问作者Pandora
相关产品推荐
相关产品推荐

