老K博客 - 一个源码和技术分享的博客

thinkphp 在二级目录运行如何配置伪静态

老K博客
2023-12-03 / 3 评论 / 207 阅读 / 正在检测是否收录...
广告

前言

最近在整理之前写的项目,想上一下演示网址,但又不想为每个项目都配置一个域名。

打算全放到 另一个域名下。

便研究起了如何配置 Nginx,以便让 thinkphp 在二级目录下运行。

目录结构

demo.fosky.top
├─reg
│ ├─application
│ ├─config
│ ├─extend
│ ├─public
│ │ │─static
│ │ │ └─css
│ │ └─index.php
│ ├─route
│ ├─runtime
│ └─thinkphp
├─shop
│ ├─application
│ ├─config
│ ├─extend
│ ├─public
│ │ └─static
│ ├─route
│ ├─runtime
│ └─thinkphp
└─zy

研究过程
百度了蛮久的,但找到的教程都和 tp 的文档上写的差不多 URL访问 · ThinkPHP5.1完全开发手册 · 看云 (kancloud.cn)

如果你的应用安装在二级目录, Nginx 的伪静态方法设置如下,其中 youdomain 是所在的目录名称。

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

便尝试着配置了下。

但是呢,我的运行目录在 public,我又不想改入口文件位置,毕竟那样我需要另外设置规则来屏蔽目录访问。

那大家可能会说了,把文档里的规则改改,加上 public 不就好了吗?

但这样会有个问题,直接访问目录显示 404。

所以还是得研究怎么改。

后面我想到,只要访问路径和二级目录名一样时,rewrite 到 index.php 不久好了吗?

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

然设置之后就可以了。

但是还是有问题的,因为我的 public 目录下是有 static 目录来存放静态文件的,但由于项目目录下找不到文件,所以它就直接 rewrite 到 index.php 了,然后就会提示模块不存在,并返回 404 错误码。

2023-10-06_22-23-43

然后我想到可以再加条匹配规则,检测到访问路径中有 static,就 rewrite 到 /public/static 去访问文件。

这样问题就解决了。

当然也可以匹配文件后缀名。

本文共 391 个字数,平均阅读时长 ≈ 1分钟
广告
0

海报

正在生成.....

评论 (3)

语录
取消
  1. 头像
    iwdccfwwya
    ·Windows 10 · Google Chrome
    沙发

    叼茂SEO.bfbikes.com

    回复 删除 垃圾
  2. 头像
    fagglksmal
    舟山 ·Windows 10 · Google Chrome
    板凳

    看的我热血沸腾啊

    回复 删除 垃圾
  3. 头像
    rusxgquqep
    舟山 ·Windows 10 · Google Chrome
    地毯

    想想你的文章写的特别好www.jiwenlaw.com

    回复 删除 垃圾
CC BY-NC-ND