迁移程序至WordPress时使用$_GET参数出现404错误求助
WordPress下GET参数404问题分析与解决
标准GET参数返回404的原因
- 重写规则未保留查询字符串
当你使用WordPress自定义固定链接(如/%postname%/)时,Apache/Nginx的重写规则需要QSA(Query String Append)标志来保留?后的参数。如果.htaccess(Apache)或Nginx配置中缺少该标志,带参数的请求会丢失查询信息,WordPress无法匹配到program页面,返回404。 - 安全模块拦截多参数请求
你的请求最多包含28个参数,部分服务器的安全模块(如mod_security)会将这类请求判定为恶意操作,直接返回404。
加$后能访问但参数失效的原因
在parameter1前加$后,参数名变为$parameter1(URL示例:home/program/?$parameter1=1¶meter2=2):
- 服务器的重写规则或安全模块未拦截这种格式的参数,请求正常传递到
program页面,因此不会返回404。 - 你的代码中是通过
$_GET['parameter1']读取参数,但实际参数键名是$parameter1,自然取不到值;后续参数键名未修改,所以能正常工作。
解决方法
1. 修复重写规则的QSA标志
- Apache环境:编辑WordPress根目录的
.htaccess,确保重写规则包含QSA:RewriteEngine On RewriteBase /home/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /home/index.php [L,QSA] - Nginx环境:在server配置中确保传递查询参数:
location /home/ { try_files $uri $uri/ /home/index.php?$args; }
2. 调整服务器安全规则
联系主机服务商,检查mod_security或其他安全插件是否拦截了你的多参数请求,要求放行/home/program/路径的请求。
3. 使用WordPress官方参数处理(推荐)
迁移到WordPress后,建议用官方方式处理参数,避免兼容问题:
- 注册自定义查询变量:
function add_custom_query_vars($vars) { $vars[] = 'parameter1'; $vars[] = 'parameter2'; // 依次注册所有需要的参数 return $vars; } add_filter('query_vars', 'add_custom_query_vars'); - 在页面模板中获取参数:
$param1 = get_query_var('parameter1'); $param2 = get_query_var('parameter2');
内容的提问来源于stack exchange,提问作者Diamaudix Audio Ltd.
相关产品推荐
相关产品推荐

