跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 不懂就问系列: PHP 网站使用 nginx 遇到的一些问题
未分類
3 10 月 2020

不懂就问系列: PHP 网站使用 nginx 遇到的一些问题

不懂就问系列: PHP 网站使用 nginx 遇到的一些问题

資深大佬 : Ethson 4

准备使用 php 做个网站,域名是 dev.hellotools.org,根目录下有四个文件,分别是,

  1. index.php,就是主页了
  2. about.php,关于页面
  3. 404.php,也就是 404 页面了
  4. /a/b/page.php,a 和 b 是目录,意思就是根目录下有个二级目录,里边有个 page.php

现在我想实现以下功能,

  1. 访问 dev.hellotools.org 时,浏览器上地址栏显示 dev.hellotools.org,且浏览器显示 index.php 的内容;
  2. 访问 dev.hellotools.org/about 时,浏览器上地址栏显示 dev.hellotools.org/about,且浏览器显示 about.php 的内容;
  3. 访问 dev.hellotools.org/nono 时,浏览器上地址栏显示 dev.hellotools.org/nono,且浏览器显示 404.php 的内容;
  4. 访问 dev.hellotools.org/a/b/page 时,浏览器上地址栏显示 dev.hellotools.org/a/b/page,且浏览器显示 /a/b/page.php 的内容

于是我的 nginx 配置如下,

server     {         listen 80;         server_name  dev.hellotools.org;          index index.html index.htm index.php default.html default.htm default.php;         root  /home/wwwroot/dev.hellotools.org;          charset utf-8;          error_page 404 /404.php;          ## enable php path info         location ~ [^/].php(/|$)         {             fastcgi_pass  unix:/tmp/php-cgi.sock;             fastcgi_index index.php;             include fastcgi.conf;             include pathinfo.conf;          }          location / {             try_files $uri $uri.php /index.php;         }     } 

搞不清楚我的配置哪里有问题,在访问 about 页面的时候,竟然文件直接下载了,404 也出不来,不知道哪里出问题了。

每个页面的内容都写清楚了,就几个简单的汉字和字母。比如你打开的是 index.php,那么页面内容就有:index.php。其它都是类似的。

折腾一晚上了,实在找不出了,望有了解的大兄弟指点一下。

大佬有話說 (8)

  • 資深大佬 : dilu

    “`
    try_files $uri $uri.php /$url.php;
    “`

    试试?

  • 資深大佬 : dilu

    try_files $uri $uri/ /$url.php;

    如果还是不行试试这个

  • 資深大佬 : zjsxwc

    仅仅只是去掉.php 后缀的话

    “`
    location / {
    try_files $uri $uri.html $uri/ @extensionless-php;
    index index.html index.htm index.php;
    }
    location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
    }
    “`

  • 主 資深大佬 : Ethson

    @dilu 你的第二个答案是对的。

    @zjsxwc 你的答案也是对的。

    非常感谢两位。只是 @dilu 提供的正确答案有些不太明白,为什么要加上 **$uri/**,这不是在目录下查找的嘛,但我这里没有这个目录啊,去找也没用啊,既然是无用功,那为什么去做呢?不得解….

  • 資深大佬 : Lax

    直接下载的问题,加一句 default_type text/html;

  • 主 資深大佬 : Ethson

    @Lax 谢谢,学到了。

  • 資深大佬 : brader

    @Ethson 你理解有误,你仔细琢磨 try_files 的用法,其实我想,$uri/没有起作用,因为它正如你想的一样,没找到,所以继续执行后面一句,起作用的是后面一句 /$url.php ,
    至于你一开始,填了$uri.php ,问题就在这里了,nginx 找到了改文件,所以 nginx 的 try_files 会将该文件发送给用户。

  • 資深大佬 : Hanada

    @Ethson 优先查找是否存在该路径,不存在才去找.php 文件。也就是如果同时有一个 test 文件夹和 test.php ,会优先匹配到 test 文件夹而不是 test.php

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具