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. 验证配置
- 重启Nginx使配置生效:
nginx -s reload
- 访问短URL
http://localhost:8202/v1/test,应正常返回tttt。
内容的提问来源于stack exchange,提问作者Toqa Abbas
相关产品推荐
相关产品推荐

