帝国Cms所做的一个网站近日从2003服务器换到Linux下的LNMP环境后之前正常的Tag伪静态打不开了,后台的搜索信息也不起作用了——一搜索所有的文章全出来了,就连编辑文章时编辑界面的表单里面显示的全是空白字段。Nginx1.8版本与Php-FPM环境,苦逼的后端哦,经历熬夜的奋斗才发现其实php5.4+并不支持帝国ecms6.6,因为几个不支持的函数的原因。童鞋们,为了世界和谐多活几天的话就不要在这个环境再折腾了,原本一直以为是Nginx对中文URI参数不支持的原因,升级到帝国cms7.2Gbk版本后问题立马解决。
升级后的帝国cms7.2版本的Tags相关中文URL伪静态不需要再像6.6的版本那样需要手动改文件了,直接在后台就能设置伪静态的表现形式,只需要自己再配一个.conf文件就行了。但实现后的Tags伪静态的效果并不完美,主要问题在于相关Tag列表页并没有一个符合Seo规范的首页路径,而是用的带有分页参数的首页,如下:
http://www.xend.live/tags/示例TAG_1.html
而我们理想的效果为目录的方式,但又不能丢掉分页功能,如下:
http://www.xend.live/tags/示例TAG/
可以通过修改帝国CMS的源文件来实现,分两步走。
一、后台设置Tags伪静态实现的具体规则
设置为../taglist/[!--tagname--]/[!--page--].html
即可
二、加入伪静态规则到Nginx网站配置文件
我们要先修改网站的配置文件,具体配置文件的地址一般为你自己的网站名,我的是在/etc/nginx/conf.d/www.xend.live.conf
在文件中找到如下区块:
location / {
root /mnt/www/www.xend.live;
index index.shtml index.html index.htm index.php;
在上面的代码下边另加一行,输入如下伪静态规则:
rewrite ^/tags/(.+?)/(.+?).html$ /e/tags/index.php?tagname=$1&page=$2 last;
rewrite ^/tags/(.+?)$ /e/tags/index.php?tagname=$1&page=$2 last;
三、修正Tags集合列表页和文章内页调用Tag时的Tag网址
我们需要修改的是/e/class/connect.php文件的1173行:
$r['pageurl']=$public_r['newsurl'].str_replace(array('[!--tagname--]','[!--page--]'),array($tagname,0),$public_r['rewritetags']);
改为
$r['pageurl']=$public_r['newsurl'].str_replace(array('[!--tagname--]','[!--page--]','.html'),array($tagname,'',''),$public_r['rewritetags']);
四、修正Tags文章列表页的分页显示效果
同样修改/e/class/connect.php文件的1251行,找到下面这行代码:
$url=str_replace('[!--page--]',$page,$r['pageurl']);
在上面这行代码的后面加入接下来的代码:
$url=str_replace('/0.html','/',$url);
保存,上传。
至此,恭喜了,Nginx下的伪静态配置已经圆满完成!
Tag:ecms,Nginx,伪静态,帝国cms
发布时间:2015年08月06日
博客被黑,挪窝简书安家……