言葉i 2018-10-16 03:24 采纳率: 0%
浏览 792

一个thinkphp5.1框架的nginx配置问题,关于path_info的错误截断,有大佬帮忙看下是为什么吗?

现在的问题是访问如下地址,预期访问到admin模块下plugs控制器下的upfile方法
图片说明

但是得到了如下的报错,由于错误的截取,导致实际访问到了'pfile'这个不存在的模块。。。
图片说明
红框内为错误的 解析结果

有大佬知道这是怎么回事吗

下面是nginx的配置
图片说明

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 07:15
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    根据您提供的信息,我注意到以下几点:

    1. server块中,您使用了SCRIPT_FILENAME来获取脚本文件名。这在Nginx的解析过程中可能会出现问题。

    2. SCRIPT_FILENAME通常用于检查请求是否指向脚本,而不是直接获取路径。如果您的应用程序是一个完整的Web应用,那么您应该使用SCRIPT_NAME来获取当前URL。

    3. 如果您正在使用SCRIPT_FILENAME,可能是因为某些脚本依赖于特定的文件结构或环境变量(例如,通过设置SCRIPT_FILENAME)。然而,在大多数情况下,您应该使用SCRIPT_NAME

    4. 您提到的错误是在pfile.html文件中的<title>标签中出现的。这可能是由于错误地将<title>...</title>替换为了<title></title>造成的。

    解决此问题的方法包括:

    • 确保正确使用SCRIPT_NAME:如果您正在使用SCRIPT_FILENAME,请务必将其更改为SCRIPT_NAME,以获取正确的路径信息。
    • 修复HTML标签:检查HTML标签是否正确。在上述示例中,<title>应被替换为</title>

    以下是修改后的server块的示例:

    server {
        listen 80;
        server_name example.com;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        }
    }
    

    请注意,这段代码适用于Apache服务器,而非Nginx。如果您正在使用的是Nginx,请将listenserver_namelocation等部分调整为您自己的服务器配置。

    评论

报告相同问题?