nginx的SCRIPT_NAME, PATH_INFO多了index.php问题
浏览:1558次 出处信息
在使用nginx进行 反向代理配置时通过正则表达式配置location后发现
通过$_SERVER['SCRIPT_NAME']; 与$_SERVER['PATH_INFO'] 发现直接获取了整个uri地址
访问uri: 127.0.0.1/index.php/site/login
正常情况应该为index.php
先获取为index.php/site/login
以下是解决方法
server { listen 80; server_name test.com; access_log /home/swin/oaih/dev/logs/access.log; error_log /home/swin/oaih/dev/logs/error.log; root /home/swin/oaih/dev/public; index index.php index.html index.htm; location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; } } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } location ~ .php($|/) { set $script $uri; set $path_info ""; if ($uri ~ "^(.+.php)(/.+)") { set $script $1; set $path_info $2; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$script; fastcgi_param SCRIPT_NAME $script; fastcgi_param PATH_INFO $path_info; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REDIRECT_STATUS 200; } }
第一个位置指令设立的基本选项,而第二个location指令匹配一个请求到自身的index.php,并把它传递到FastCGI来处理。下一次请求index.php是没有进行正确的配置。
在处理我们的问题的整个配置文件的关键部分是这样的:
location ~ .php($|/) { set $script $uri; set $path_info ""; if ($uri ~ "^(.+.php)(/.+)") { set $script $1; set $path_info $2; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$script; fastcgi_param SCRIPT_NAME $script; fastcgi_param PATH_INFO $path_info; }
location指定匹配所有的php请求将不指定为先前的全部uri, 它还清空$path-info变量, if语句匹配任何类似下面的请求:http://mysite/index.php/foo和放入的index.php的$script变量和/ foo $path_info变量。
$script and $path_info将被插入到服务器变量SCRIPT_NAME和PATH_INFO的fastcgi的参数,并允许PHP妥善处理请求。
建议继续学习:
- 配置Nginx+uwsgi更方便地部署python应用 (阅读:105476)
- 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (阅读:32585)
- 解析nginx负载均衡 (阅读:14694)
- Nginx模块开发入门 (阅读:9997)
- 检查nginx配置,重载配置以及重启的方法 (阅读:9212)
- Cacti 添加 Nginx 监控 (阅读:8985)
- Nginx+FastCgi+Php 的工作机制 (阅读:8951)
- nginx的配置文件 (阅读:8925)
- 奇怪的 Nginx 的 upstream timed out 引起响应 502 (阅读:8353)
- 解决IE6从Nginx服务器下载图片不Cache的Bug (阅读:7166)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:nginx location在配置中的优先级
后一篇:nginx访问控制Access Control的问题 >>
文章信息
- 作者:kevn 来源: web前端开发-kevn 记录web前端开发技术
- 标签: PATH_INFO nginx SCRIPT_NAME
- 发布时间:2015-04-08 13:51:01
建议继续学习
近3天十大热文
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [65] android 开发入门
- [63] find命令的一点注意事项
- [62] Go Reflect 性能
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 读书笔记-壹百度:百度十年千倍的29条法则