WordPress中.htaccess RewriteRule配置出现500错误求助
解决WordPress中.htaccess RewriteRule导致的500错误问题
你的500错误大概率是因为内部重写循环导致的——Apache的mod_rewrite会反复处理重写后的URL,直到达到最大循环次数(默认10次),然后抛出500错误。原规则没有限制重复触发的条件,导致重写后的请求又被规则匹配,陷入循环。
解决方案1:添加循环防护条件(兼容所有Apache版本)
在RewriteRule前增加一个条件,确保只有当URL中还没有get_value参数时才执行重写,避免循环:
# 防止循环:仅当查询字符串中没有get_value参数时执行重写 RewriteCond %{QUERY_STRING} !get_value= RewriteRule ^index.php/field/(.*)$ index.php/field/?get_value=$1 [L]
解决方案2:使用END标记(Apache 2.4+推荐)
如果你的服务器运行Apache 2.4或更高版本,可以直接用END标记替代L,它会完全终止所有重写处理,从根源上避免循环:
RewriteRule ^index.php/field/(.*)$ index.php/field/?get_value=$1 [END]
重要注意事项:规则位置
请把你的自定义规则放在WordPress默认规则区块的前面,否则WordPress的规则会先捕获请求,导致你的自定义规则无法生效。完整的.htaccess示例如下:
# 自定义重写规则(放在WordPress规则之前) RewriteCond %{QUERY_STRING} !get_value= RewriteRule ^index.php/field/(.*)$ index.php/field/?get_value=$1 [L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
测试验证
修改完.htaccess后,访问https://domain_name.com/index.php/field/test_value,检查是否成功内部重定向到https://domain_name.com/index.php/field/?get_value=test_value,同时没有500错误。
内容的提问来源于stack exchange,提问作者molinet
相关产品推荐
相关产品推荐

