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

Yii2高级模板自定义结构下Nginx短URL配置异常排查

解决Yii2 v1应用短URL访问500错误的配置调整

1. 修改Yii2 URL管理器配置

打开v1/config/main.php,调整urlManager配置,开启美化URL并修正路由规则:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false, // 隐藏URL中的index.php
    'rules' => [
        'GET test' => 'site/test', // 匹配/v1/test请求到site/test动作
        // 可选:添加通用路由规则,适配更多控制器/动作
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    ],
],
  • 关闭enablePrettyUrl时,Yii仅识别?r=xxx格式的URL,必须开启才能使用短URL。
  • 规则无需带v1/前缀,因为当前配置属于v1应用本身,请求的/v1/test经Nginx转发后,Yii内部仅处理test部分。

2. 调整Nginx配置

修改Nginx的location /v1块,确保请求正确转发到v1应用的index.php并正确处理PHP文件:

location /v1 {
    root $base_root/v1/web;
    # 优先匹配静态文件,不存在则转发到index.php处理
    try_files $uri $uri/ /v1/index.php$is_args$args;

    # 处理/v1根路径的请求(规避Nginx路径解析bug)
    location = /v1 {
        try_files $uri /v1/index.php$is_args$args;
    }

    # 处理v1应用下的PHP请求,使用当前location的root($base_root/v1/web)
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    # 禁止访问assets目录下的PHP文件,提升安全性
    location ~ ^/assets/.+\.php(/|$) {
        deny all;
    }
}

关键修正点:

  • 原全局location ~ \.php$使用全局root $base_root,转发/index.php时会查找不存在的$base_root/index.php,导致"No input file specified."错误。
  • 在location /v1内嵌套PHP处理规则,确保PHP文件路径基于$base_root/v1/web而非全局根目录。
  • try_files的转发目标改为/v1/index.php$is_args$args,明确指向v1应用的入口文件。

3. 验证配置

  1. 重启Nginx使配置生效:
nginx -s reload
  1. 访问短URL http://localhost:8202/v1/test,应正常返回tttt。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:34:54