Nginx+Perl配置URL批量重定向失败,跳转至主页求助
问题修复方案
1. 修正Perl变量定义(同时处理小写转换和下划线替换)
原Perl代码仅完成小写转换,未覆盖目标URL要求的_转--规则,同时调整变量名提升可读性,修改nginx.conf中的代码:
perl_modules perl/lib; perl_set $rewritten_uri 'sub { my $r = shift; my $uri = $r->uri; # 将URI转为全小写 $uri = lc($uri); # 把所有下划线替换为两个减号 $uri =~ s/_/--/g; return $uri; }';
2. 修正Location重写规则(避免循环跳转+明确跳转类型)
原rewrite规则未指定跳转类型,且无循环判断逻辑,导致Nginx内部重定向异常。修改example.com.conf中的location配置:
location /products/ { # 仅当当前URI不符合目标格式时才触发跳转,避免无限循环 if ($uri !~ ^/products/[a-z0-9-]+$) { # permanent 代表永久重定向(HTTP 301),若需临时重定向可改用 redirect(HTTP 302) rewrite ^(.*)$ $scheme://$host$rewritten_uri permanent; } # 此处添加/products/路径的正常请求处理配置(如 root、proxy_pass 等) # 示例:root /path/to/products/static/files; }
问题根源说明
- 原配置未指定跳转类型,Nginx默认执行内部重定向,若变量获取异常则会跳转至默认主页。
- 缺少循环判断逻辑,若不检查当前URI是否已符合要求,会触发无限重复跳转。
- 未处理目标URL要求的下划线转双减号规则,无法完全匹配需求。
配置修改后,执行nginx -t验证语法正确性,无误后重启Nginx即可生效。
内容的提问来源于stack exchange,提问作者user3774771
相关产品推荐
相关产品推荐

