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

Laravel应用迁移至Nginx-FPM后出现URL循环重定向问题求助

Laravel迁移Nginx后URL循环重定向问题

我正在把一款Laravel应用从Apache迁移到Nginx环境,已经确认PHP-FPM运行正常(可正常访问phpinfo),但配置Laravel的public目录后出现URL循环重定向问题,请求日志中/login的return_url参数不断重复追加:

10.240.0.26 - - [09/Apr/2024:12:49:34 +0100] "GET /login?return_url=/login?return_url=/login?return_url=/login?return_url=/login?return_url=/login?return_url=/login?return_url=/login??return_url=/login?return_url=/login?return_url= HTTP/1.1" 302 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"

我并非该应用开发者,以下是我在Ubuntu 22.04上的Nginx配置(初始修改版与当前完整版),恳请提供排查思路:

初始修改版Nginx配置

location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        # Allow headers
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization' always;
    }

当前完整版Nginx配置

server {
    listen 80;
    server_name console.notlistingmyserver.com;
    root /data/www/consoleapp/console/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index /index.php;
        include fastcgi_params;


        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;

    }

 
}

排查思路

  • 优先恢复Laravel官方推荐的Nginx重写规则,替换当前的@rewrite逻辑。官方标准配置为:

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    

    当前用_url参数传递路径的方式,可能和Laravel路由解析逻辑冲突,导致return_url生成异常。

  • 检查Laravel应用的.env文件,确认APP_URL与Nginx的server_name完全一致(比如http://console.notlistingmyserver.com),URL不匹配会导致应用生成跳转链接时出错,触发循环重定向。

  • 验证应用登录逻辑:未登录用户访问权限页面时,会跳转至/login并携带return_url。如果应用的return_url生成逻辑未正确处理已存在的参数,就会重复追加。可临时注释权限中间件,测试是否仍出现循环重定向,以此判断是Nginx配置问题还是应用逻辑问题。

  • 检查Nginx的fastcgi_params文件,确认其中是否已定义REQUEST_URI。当前配置手动添加了该参数,若文件中已有重复定义,可能导致参数值异常,引发路由解析错误。

  • 清除Laravel路由缓存:执行php artisan route:clear,避免缓存的路由规则与当前环境不匹配。

内容的提问来源于stack exchange,提问作者Riaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:55:13