wordpress 在百度bch虚拟空间下实现伪静态rewrite几种方法优缺点

我用的这个百度bch空间,path_info默认开启,所以wordpress能实现 xx.com/index.php/123.html 这种模式的伪静态链接。但感觉这类url不好看,于是改为 xxx.com/archives/123.html 在WordPress后台“设置”-》“固定链接”自定义方式,修改好后。访问页面显示404,通过网上查询得知需要配置主机的 rewrite方式。

百度BCH虚拟空间使用的是nginx系统,支持用户自定义配置,于是新建文本文件,重命名为 bcloud_nginx_user.conf

然后添加代码,并上传到webroot文件夹内,然后登陆主机控制面板,常用操作,主机启停,然后在页面点击“重新加载服务”即可启用配置。

配置代码如下:

方式1:

location / {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}

}

方式2

location / {
try_files $uri $uri/ /index.php?$args;

}

这两种方式其实原理都相同,首先判断文件是否存在,如果存在就读取,不存在则改写url到index.php并把参数带入。然后WordPress会根据你设定的固定链接的格式解析参数。其实rewrite后还是用的path_info方式。

但这两个方式缺点很明显,就是要通过文件系统io操作来判断文件是否存在,磁盘io操作的开销是很大的,网站访问量小无所谓,访问量大的话对性能的影响不容忽视。

但如果不判断url内的文件名而直接把参数传给index.php,也会出现问题,比如图片不能显示,后台不能打开等等。

方式3

rewrite ^/archives/(.*)$ /index.php/$1;

代码的实现原理是先判断关键字,如果存在archives关键字的则把archives改写为index.php并带入参数。就相当于自动回到了path_info模式。archives是自定义的识别关键字,你也可以更改为其他文字。

相对于方法1和方法2,方法3没有磁盘IO操作,直接字符串解析即可完成。提高了效率节约了系统资源。

发表评论

电子邮件地址不会被公开。 必填项已用*标注