解决百度云虚拟主机BCH配置thinkphp 5 重写规则的问题

因为穷,买的是云虚拟主机,也就是以前所说的空间,所以很多配置受限。

自己做的小站(www.it100.site)用的是thinkphp 5 框架写的。因为thinkphp 5开始,将网站的入口文件改为public目录下,而非项目根目录下了,所以需要将虚拟主机的配置指向public目录。

但是百度云虚拟主机不支持修改域名绑定的目录,只能指向/webroot这个目录。所以我们需要想变通的办法。

首先我们在 /webroot 的目录下创建一个index.php,然后在这个文件中写入下面代码:

<?php
require './public/index.php';

配置后需要重载站点服务,这样才会生效。

这样我们就将thinkphp 5 中public目录下的入口文件作为根目录可以访问了。

然后我们看到首页可以正常访问了, 但是子页还是无法访问。这是因为我们还没有配置重写规则。

百度云虚拟主机现在支持主机定义一些server级别以下的nginx配置。我们可以在网站根目录下新建一个自定义的nginx配置文件。加上如下代码:

location / {
    #下面主要是解决在url地址中省略"index.php"时使用的规则
    if ( -f $request_filename) {
        break;
    }
    #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
    if ( !-e $request_filename) {
        #地址作为将参数rewrite到index.php上
        rewrite ^/(.*)$ /index.php/$1 last;
        break;
    }
}

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|eot|otf|ttf|woff|woff2|svg|xml)$ {
   root /home/bae/app/public;
   expires 30d;
   access_log off;
}

重写规则配置好后,同样在百度后台重载站点服务后,即刻生效。

原文地址:https://www.cnblogs.com/it100fen/p/13026894.html