解决百度云虚拟主机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;
}
重写规则配置好后,同样在百度后台重载站点服务后,即刻生效。