2019独角兽企业重金招聘Python工程师标准>>>

问题简述:thinkphp5怎么在url访问中去掉public。

实验环境: Linux、nginx、mysql、php(lnmp一键集成1.4测试版,更多信息lnmp.org) 本文兼顾的问题: 1.安全的配置(同一vps多站点) 2.友好的站点入口 部署问题重述: 由于thinkphp5经过重构,和thinkphp3.2有很大的不同,其中之前的入口文件index.php由/index.php改为/public/index.php, 那么问题来了: 1.如果按lnmp集成环境提供的方法(lnmp vhost add)添加虚拟站点,访问站点就要加个二级目录,如 http://xxx.com/public

所以为了可以让访问链接变得更加友好(即http://xxx.com),可以修改/usr/local/nginx/conf/vhost/xxx.com.conf(下称“专属配置”)

root /home/wwwroot/xxx.com/;

改为:

root /home/wwwroot/xxx.com/public;

那么问题来了,由于lnmp环境考虑到虚拟站点各自的访问目录权限问题,于是在/usr/local/nginx/conf/fastcgi.conf 里配置了

 fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

那么每个站点的访问权限就限制在各自的document_root里了, 于是,我们修改的root(root /home/wwwroot/xxx.com/public;)就把权限限制在public目录之后, 软件架构根目录下的application等都无法访问了,那么此时我们要解决的问题是: 2.既要保持root /home/wwwroot/xxx.com/public;,又要让虚拟站点有/home/wwwroot/xxx.com目录的访问权限, 那么可以修改/usr/local/nginx/conf/fastcgi.conf配置文件:

 fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

改为:

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/wwwroot/xxx.com/:/tmp/:/proc/";

但问题来了,/usr/local/nginx/conf/fastcgi.conf是公共配置文件,采用这种写死的方式会导致其他站点不可用, 为了兼顾其他虚拟站点,if_not_empty派上用场了, 修改方法为: 不改变/usr/local/nginx/conf/fastcgi.conf配置文件里的原配置,而在

   fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

之后添加

 fastcgi_param PHP_ADMIN_VALUE $basedir if_not_empty;#注意nginx要在1.1.11版本之后

$basedir变量就可以在/usr/local/nginx/conf/vhost/xxx.com.conf配置文件里的include enable-php.conf前赋值:

    set $basedir "open_basedir=/home/wwwroot/dev.yunshare.net/:/tmp/:/proc/";

优点:这样既满足了thinkphp5的部署要求,又不影响其他一般站点的使用。 缺点:如果$basedir没有赋值(至少一个专属配置有赋值),nginx -t无法通过。

注意rewrite规则: 最后献上thinkphp的rewrite规则: 这种写法3.2是可以的,但在这里是不可以的,否则经测试pathinfo为空

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

应该改为:

  location / {if (!-e $request_filename){rewrite ^/(.*)$ /index.php?s=/$1 last;}}

好了,一篇关于thinkphp5的rewrite写到这,欢迎多多交流

总结:

lnmp环境
thinkphp框架不改变目录结构的情况下配置rewrite规则
Linux权限,安全问题

参考资料: http://www.kancloud.cn/manual/thinkphp5/207415 http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html

转载请注明:爱游思 » thinkphp5部署于Linux中nginx多站点解决方案

转载于:https://my.oschina.net/zhliang/blog/895015

thinkphp5部署于Linux中nginx多站点解决方案相关推荐

  1. Asp.Net项目的部署到Linux中(Linux + Jexus+Nginx )

    因为老项目用的Asp.Net Web API技术开发部署到Window系统上,而新项目用的是.Net Core部署到Ubuntu系统中,所以在管理切换上有些不便.于是决定将老项目的测试服部署到Ubun ...

  2. Linux中nginx安装基础教程

    Linux中nginx安装基础教程 1.安装所需的运行环境 (1) 需要安装gcc的环境. yum install gcc-c++ (2)第三方包.   Perl库 PCRE(Perl Compati ...

  3. linux nginx http cache时间不对,Linux中Nginx设置proxy_cache缓存与取消缓存-linux-操作系统-壹...

    本文章来讲述一下关于Linux中Nginx设置proxy_cache缓存与取消缓存实现方法,有需要的朋友可参考. 在配置文件的server{}内,添加这么一句即可: 代码如下 复制代码 locatio ...

  4. linux中nginx安装前置条件以及安装流程,非常简单

    linux中nginx安装前置条件以及安装流程,非常简单 我的主机的centos8 安装nginx之前需要安装的依赖 //安装c编译器 yum -y install gcc gcc-c++ yum - ...

  5. Linux中nginx重启、启动与停止

    1.启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 代码如下(示例): /usr/local/nginx/sbin/nginx -c /usr/local/nginx/con ...

  6. linux中nginx重启命令

    linux中nginx重启命令 解决方法: 重启前可以通过这个命令检查配置文件修改是否正确:/usr/sbin/nginx  -t 例如: [root@iZ23tprq0piZ ~]# /usr/sb ...

  7. 解决kettle部署在linux中界面变成英文的问题

    问题描述:将kettle的包集成到web应用中,部署到Linux系统中,中文标签不正常显示 问题原因:Linux系统的语言环境为不是zh_CN.UTF-8,其代表中国使用的Unicode字符集 解决办 ...

  8. Linux中Nginx安装与配置详解及常见问题

    3 Nginx安装 3.1 安装前的准备     1)准备 pcre-8.12.tar.gz.该文件为正则表达式库.让nginx支持rewrite需要安装这个库.     2) 准备 nginx-1. ...

  9. Linux中nginx如何重启、启动与停止/设置开机自启动

    目录 0.补充有关于centos7中nginx开机自启动内容,跳转地址如下: 一.启动/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/ngin ...

最新文章

  1. 烂泥:学习Nagios(三): NRPE安装及配置
  2. 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss
  3. applicaiton.yml 日志配置_底层基于Apache Hudi的DLA最佳实践 海量、低成本日志分析...
  4. ICCV 2019 论文解读 | 基于层次解析的Image Captioning
  5. 腾讯计费:助力游戏千亿级营收,覆盖180多个国家
  6. spring boot 启动卡住_SpringBoot集成的44种启动器,你知道几种?
  7. python资源管理器选择文件_Python:在资源管理器中获取选定文件的列表(windows7)...
  8. Storm精华问答 | Storm如何连接MySQL?
  9. Flutter项目实战教程分享、基础使用、性能优化、每日积累
  10. XMLHelper 辅助类
  11. python中类的构成_Python类的构成元素
  12. eclipse 环境 JUnit 测试框架(junit.framework.* 与 org.junit.*)
  13. 日语输入法电脑版_如何安装日语输入法?(手机/电脑安装使用指南)
  14. error C2864 只有静态常量整型数据成员才可以在类中初始化
  15. Naive UI的初体验
  16. canvas 角度 弧度 换算
  17. 55-硅谷课堂1(项目概述+MyBatisPlus使用+搭建项目环境+开发讲师管理接口)
  18. 做一个网站真的有那么难吗?
  19. CSS的一些基础应用
  20. 屏蔽鼠标右键,F1帮助和常用快捷键

热门文章

  1. idea java sdk找不到指定文件路径_java-IntelliJ找不到任何声明
  2. python 回溯法 01背包问题_回溯法解决01背包问题
  3. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...
  4. dalsa工业相机8k参数_偏振光相机3——偏振应用
  5. 微信小程序php java_PHP实现微信小程序用户授权的工具类示例
  6. 新建的ORACLE实例要开启监听,创建ORACLE实例与设置监听器过程
  7. pcl点云库python实现_如何有效地将ROS PointCloud2转换为pcl点云并在python中将其可视化...
  8. div中赋值html字符串
  9. AndroidStuido连接不上手机的解决方法
  10. 腾讯王者荣耀AI论文首次曝光:五AI王者局开黑与人类战队打成平手