LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2

你是否遇见过:安装LNMP1.3环境后,运行ThinkPHP 3.2,只能打开首页,不能访问控制器,报404错误。

按照以下3步设置,即可解决。

ThinkPHP支持的URL模式有四种:普通模式、PATHINFO、REWRITE和兼容模式,系统默认的PATHINFO模式。

LNMP1.3 一键安装完成后,默认支持REWRITE,需要手动开启 PATHINFO。

第1步修改:php.ini文件
位置:/usr/local/php/etc/php.ini

搜索查找到:cgi.fix_pathinfo 配置项,默认为0,修改为1,开启 pathinfo 选项。

如图1:

第2步修改:nginx的配置文件 (笔者使用的是虚拟域名配置文件:/usr/local/nginx/conf/vhost/*.conf)

找到 server 的配置选项:

默认只有 include enable-php.conf,请注释掉;
然后添加一行:include enable-php-pathinfo.conf

如:

  1. 1
  2. 2
  3. 3
  1. #error_page 404 /404.html;
  2. #include enable-php.conf; # 注册这一行
  3. include enable-php-pathinfo.conf; # 加入这行

如图2:

继续修改,在添加下面配置信息:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  1. location ~ .php
  2. {
  3. set $path_info "";
  4. set $real_script_name $fastcgi_script_name;
  5. #如果地址与引号内的正则表达式匹配
  6. if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
  7. #将文件地址赋值给变量 $real_script_name
  8. set $real_script_name $1;
  9. #将文件地址后的参数赋值给变量 $path_info
  10. set $path_info $2;
  11. }
  12.  
  13. #配置fastcgi的一些参数
  14. fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  15. fastcgi_param SCRIPT_NAME $real_script_name;
  16. fastcgi_param PATH_INFO $path_info;
  17. }

在Nginx,可以通过在Nginx.conf中配置转发规则实现,解决其他不支持PATHINFO的WEB服务器环境。

#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  1. if (!-e $request_filename)
  2. {
  3. #地址作为将参数rewrite到index.php上。
  4. rewrite ^/(.*)$ /index.php/$1;
  5. #若是子目录则使用下面这句,将subdir改成目录名称即可。
  6. #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
  7. }

官方出处:http://document.thinkphp.cn/manual_3_2.html#url_rewrite

第3步:重启LNMP环境,配置生效。

最终效果测试:
1. 去掉了 index.php
2. 可以访问控制器下的方法。
3. U 方法正确。

如图3:

参考:笔者配置文件示例:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  1. server
  2. {
  3. listen 80;
  4. #listen [::]:80;
  5. server_name tp32.com;
  6. index index.html index.htm index.php default.html default.htm default.php;
  7. root /home/wwwroot/tp32.com;
  8.  
  9. include other.conf;
  10. #error_page 404 /404.html;
  11. #include enable-php.conf;
  12. include enable-php-pathinfo.conf; #加入这行
  13.  
  14. location ~ .php
  15. {
  16. set $path_info "";
  17. set $real_script_name $fastcgi_script_name;
  18. #如果地址与引号内的正则表达式匹配
  19. if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
  20. #将文件地址赋值给变量 $real_script_name
  21. set $real_script_name $1;
  22. #将文件地址后的参数赋值给变量 $path_info
  23. set $path_info $2;
  24. }
  25.  
  26. #配置fastcgi的一些参数
  27. fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  28. fastcgi_param SCRIPT_NAME $real_script_name;
  29. fastcgi_param PATH_INFO $path_info;
  30. }
  31.  
  32. #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
  33. if (!-e $request_filename)
  34. {
  35. #地址作为将参数rewrite到index.php上。
  36. rewrite ^/(.*)$ /index.php/$1;
  37. #若是子目录则使用下面这句,将subdir改成目录名称即可。
  38. #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
  39. }
  40.  
  41. access_log /home/wwwlogs/tp32.com.log;
  42. }

入口文件index.php

  1. 1
  2. 2
  1. //nginx环境下防止U方法输出错误
  2. define('__APP__', '');

参考:
http://www.thinkphp.cn/topic/3138.html

LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2的更多相关文章

  1. linux环境配置nginx导致页面不刷新

    在linux环境下,配置了nginx负载均衡,由于可能在虚拟主机的配置文件nginx.conf中,对缓存机制未配置成功,导致页面不刷新,仍然显示缓存中的内容. 最后通过注释nginx.conf文件中的 ...

  2. JAVA IntelliJ IDEA for mac/jdk的安装及环境配置、运行

    现在配置完之后再回头看看,其实挺简单, 但我还是弄了好几个小时才配置出来, 不过好在是自己配置出来的, 每天都在慢慢进步. 安装及配置步骤如下: JAVA的IDE的话去jetbrains的官网上对应下 ...

  3. Linux一键安装LNMP环境

    Linux一键安装LNMP环境 官方地址:https://lnmp.org/. 参考安装步骤:https://lnmp.org/install.html. 一键安装可以选择mysql版本.php版本, ...

  4. Linux一键安装web环境全攻略phpstudy版

    此教程主要是应对阿里云Linux云服务器ecs的web环境安装,理论上不限于阿里云服务器,此教程对所有Linux云服务器都具有参考价值. 写这篇文章的目的:网上有很多关于Linux一键安装web环境全 ...

  5. virtualBox安装centos7并配置nginx php mysql运行环境

    virtualBox安装centos7并配置nginx php mysql运行环境 一:virtualBox安装centos7并进行基础设置 1.下载dvd.iso安装文件,下载地址:https:// ...

  6. Linux下安装Java环境配置

    1.下载安装文件 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. ...

  7. Linux RabbitMQ的安装、环境配置、远程访问 , Windows 下安装的RabbitMQ远程访问

    Linux  RabbitMQ的安装和环境配置 1.安装 RabbitMQ是使用Erlang语言编写的,所以安装RabbitMQ之前,先要安装Erlang环境 #对原来的yum官方源做个备份 1.mv ...

  8. rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装

    rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装 待办 https://blog.csdn.net/CSDN_duomaomao/art ...

  9. LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx

    前几天介绍了最新StartSSL免费SSL申请与配置,很多人看到部落介绍SSL证书安装时总是推荐了OneinStack,因为OneinStack提供了一键添加和配置Let's Encrypt 免费SS ...

随机推荐

  1. 性能测试培训:定位jvm耗时函数

    性能测试培训:定位jvm耗时函数   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...

  2. python作业设计:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定

    作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判 ...

  3. activiti 一个流程的运转步骤 以请假流程为例

    ---为了加深对activiti的理解记忆,对自己做的一个流程进行自述.加强记忆 请假实例 一.设计请假的流程图以及流程文件,完善对应数据项,比如用户信息,请假单信息 --请假单 --流程图 --流程 ...

  4. 腾讯云上PhantomJS用法示例

    崔庆才 前言 大家有没有发现之前我们写的爬虫都有一个共性,就是只能爬取单纯的html代码,如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没 ...

  5. 浩哥解析MyBatis源码(十)——Type类型模块之类型处理器

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6715063.html 1.回顾 之前的两篇分别解析了类型别名注册器和类型处理器注册器,此二 ...

  6. 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)

    用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...

  7. 【从无到有】教你使用animation做简单的动画效果

    今天写写怎么用animation属性做一些简单的动画效果 在CSS选择器中,使用animition动画属性,调用声明好的关键帧 首先声明一个动画(关键帧): @keyframes name{ from ...

  8. Web性能优化工具WebPageTest(三)——本地部署(Windows 7版本)

    这次先能够使用PC端的浏览器测试,首先需要下载官方的发布版本"WebPageTest 3.0". 1. agent:浏览器代理软件 2. mobile:移动端参数相关代码 3. w ...

  9. json数据渲染表单元素出现的问题

    解析页面表单元素 parseForm: function () { var data = {}; $(this).find('input').each(function () { switch ($( ...

  10. JQuery hover鼠标变换

    一般而言,我们为非按钮.链接等元素添加hover事件时,虽然能够处理悬停事件,但是鼠标却并没有变化,会造成悬停事件不明显的结果,为此,我们可以添加CSS样式cursor:pointer,使得该元素的悬 ...