Nginx配置动态URL重写 解决站点地图XML访问失效问题
解决方案
1. 修正重写规则,补充查询字符串追加支持
你当前的Nginx重写规则缺少和ApacheQSA对应的配置,当原请求携带额外查询参数时会丢失,也可能导致参数传递异常,修改规则如下:
rewrite "^/([^/]+)\.xml/?$" /sitemap.php?p=$1 last qsa;
新增的qsa标志和Apache的QSA作用一致,会将原请求的查询参数和新的p参数合并传递给sitemap.php。
2. 调整重写规则的优先级
Nginx的正则匹配遵循「先写先匹配」的规则,如果你现有配置中存在location ~* \.xml$这类匹配静态XML文件的规则,会优先拦截所有XML请求,导致你的动态重写规则不生效,你可以选择以下任意一种方式解决:
- 方式一:将上述重写规则直接放在
server块下的最顶部,早于所有location块生效 - 方式二:新增高优先级的独立location处理动态XML请求,放在所有其他正则location之前:
location ~ ^/([^/]+)\.xml/?$ { rewrite "^/([^/]+)\.xml/?$" /sitemap.php?p=$1 last qsa; }
3. 验证PHP参数传递配置
检查处理PHP请求的location块中,是否存在以下配置,确保查询参数能正常传递给$_GET全局变量:
fastcgi_param QUERY_STRING $query_string;
该配置为Nginx处理PHP的默认配置,若被误删需要补充回去。
配置修改完成后,执行nginx -s reload重载配置即可生效。
内容的提问来源于stack exchange,提问作者sooraj s pillai
相关产品推荐
相关产品推荐

