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

.htaccess更新后WordPress网站出现500内部错误,求排查原因

WordPress .htaccess更新后反复触发500错误的解决办法

网站基于WordPress搭建,搭配WPML和Elementor插件,每次.htaccess自动更新后就会出现500内部服务器错误。手动删除# BEGIN WordPress与# END WordPress之间的乱码阿拉伯语注释后,网站能恢复正常,但问题会反复出现。

问题根源

乱码注释是字符编码不兼容导致的:Apache服务器要求.htaccess必须使用UTF-8无BOM编码,但自动生成这些注释的组件(大概率是WPML多语言插件或主机的Newfold缓存工具)写入注释时用了错误编码,产生无法解析的乱码字符,触发服务器报错。而且WordPress会在固定链接更新、插件配置变更等场景自动重写.htaccess,每次重写都会重新插入乱码注释,导致问题反复。

解决办法

1. 禁用WordPress自动生成注释的功能

往主题的functions.php文件添加以下代码,阻止WordPress在重写.htaccess时插入默认注释:

add_filter('mod_rewrite_rules', function($rules) {
    $rules = preg_replace('/# BEGIN WordPress.*?# END WordPress/s', '# BEGIN WordPress' . PHP_EOL . $rules . PHP_EOL . '# END WordPress', $rules);
    return $rules;
});

或者直接替换默认重写规则输出:

add_filter('generate_rewrite_rules', function($wp_rewrite) {
    $wp_rewrite->rules = array(
        '^ar/wp-login.php' => '/wp-login.php [QSA,L]',
        '^index\.php$' => '- [L]',
        '.' => '/index.php [L]'
    );
});

注意:修改前先备份functions.php,用子主题修改更稳妥,避免主题更新覆盖代码。

2. 修复WPML的注释编码问题

WPML生成多语言规则时可能因编码设置出错:

  • 进入WPML设置页面,检查站点语言和次要语言的编码,确保统一为UTF-8。
  • 关闭WPML自动更新.htaccess的功能:在WPML → 语言 → 站点语言设置的高级选项里,关掉“自动更新.htaccess以支持多语言URL”。然后手动把必要的多语言重写规则(比如RewriteRule ^ar/wp-login.php /wp-login.php [QSA,L])加到# BEGIN WordPress区块内,之后把.htaccess权限改成644,防止自动改写。

3. 清理并锁定.htaccess文件

  • 手动清理乱码注释,保留正常规则(如下):
# BEGIN WordPress
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 24 hours"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/gif "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "access plus 24 hours"
    ExpiresByType application/pdf "access plus 1 week"
    ExpiresByType text/javascript "access plus 24 hours"
    ExpiresByType text/html "access plus 2 hours"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresDefault "access plus 24 hours"
</IfModule>
Options -Indexes
<IfModule mod_headers.c>
    Header set X-Endurance-Cache-Level "1"
    Header set X-nginx-cache "WordPress"
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^ar/wp-login.php /wp-login.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
  • 通过FTP或主机控制面板,把.htaccess权限设为644,禁止自动改写。后续需要更新规则时,再临时改为可写,更新后改回只读。

4. 排查主机插件冲突

你的.htaccess里有Newfold缓存相关规则,这类主机插件可能和WPML的.htaccess改写冲突:

  • 暂时禁用Newfold缓存功能,看看问题是否消失。
  • 联系主机提供商,确认Newfold工具是否支持多语言站点的编码兼容。

内容的提问来源于stack exchange,提问作者5G Salalah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:44:50