帝国CMS中,搜索时只要是出现 404页面,一般都是伪静态出现问题。如果是参数没传递或者submit form没设计好,出现的通常是 “没搜到任何内容” 的提示页面。

以nginx 环境为例,出现 nginx 404页面,可以首先检查伪静态的问题,还是上次下载的模版,带数据,但发现在哪个页面搜索都会弹出404的错误提示。

一、检查并设置伪静态

[caption id="attachment_1818" align="alignnone" width="496"]帝国CMS 搜索页 出现 nginx 404错误 常见解决办法 检查并设置伪静态[/caption]

登录后台,检查conf文件配置: vi /usr/local/nginx/conf/diguo.conf(这个是自己配置的conf,参考《解决 Lnmp环境中 为帝国cms7.2 开启伪静态的问题》中的配置)。注意箭头所示,这是测试成功后应该添加的代码。是已经开启了伪静态搜索页对应的代码,如何开启文章最后附上。

把原来的

rewrite ^/search/(name¦url¦tags¦intro¦pr¦br)/(.+)-(\d+).html$ /index.php?mod=search&type=$1&query=$2&page=$3 last;

rewrite ^/search/(name¦url¦tags¦intro¦pr¦br)/(.+).html$ /index.php?mod=search&type=$1&query=$2 last;

替换成

rewrite ^([^\.]*)/search-(.+)-(\d+).html$ $1/e/search/result/index.php?page=$2$searchid=$3 last;

替换完成后 restart lnmp即可。

二、帝国CMS搜索开启伪静态的方法:

A、打开\e\search\index.php   411行左右,找到:

Header("Location:result/?searchid=$searchid".$dogetvar);

修改为:

Header("Location:$public_r[newsurl]search-0-$searchid.html".$dogetvar);

B、打开\e\search\result\index.php  20行左右,找到:

//搜索结果

$searchid=(int)$_GET['searchid'];

在前面添加分页函数:

//增加分页函数 
function page10($num,$line,$page_line,$start,$page,$search){ 
global $fun_r; 
if($num<=$line) 
{ 
return ''; 
} 
$search=RepPostStr($search,1); 
$url=$public_r['newsurl'].'search'; 
$snum=2;//最小页数 
$totalpage=ceil($num/$line);//取得总页数 
$firststr='<a title="'.$fun_r['trecord'].'">&nbsp;'.$num.'&nbsp;</a>&nbsp;&nbsp;'; 
//上一页 
if($page<>0) 
{ 
$toppage='<a href="'.$url.'-0-'.$search.'.html">'.$fun_r['startpage'].'</a>&nbsp;'; 
$pagepr=$page-1; 
$prepage='<a href="'.$url.'-'.$pagepr.'-'.$search.'.html">'.$fun_r['pripage'].'</a>'; 
} 
//下一页 
if($page!=$totalpage-1) 
{ 
$pagenex=$page+1; 
$nextpage='&nbsp;<a href="'.$url.'-'.$pagenex.'-'.$search.'.html">'.$fun_r['nextpage'].'</a>'; 
$lastpage='&nbsp;<a href="'.$url.'-'.($totalpage-1).'-'.$search.'.html">'.$fun_r['lastpage'].'</a>'; 
} 
$starti=$page-$snum<0?0:$page-$snum; 
$no=0; 
for($i=$starti;$i<$totalpage&&$no<$page_line;$i++) 
{ 
$no++; 
if($page==$i) 
{ 
$is_1="<b>"; 
$is_2="</b>"; 
} 
else 
{ 
$is_1='<a href="'.$url.'-'.$i.'-'.$search.'.html">'; 
$is_2="</a>"; 
} 
$pagenum=$i+1; 
$returnstr.="&nbsp;".$is_1.$pagenum.$is_2; 
} 
$returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage; 
return $returnstr; 
}

 

然后在48行左右找到:

$listpage=page1($num,$line,$page_line,$start,$page,$search);

修改为

$listpage=page10($num,$line,$page_line,$start,$page,$search);

搜索:

$search="&searchid=".$searchid;

修改为

$search="$searchid";

C、添加伪静态规则(例子为Apache,自己修改为对应的)

#Apache 写进 .htaccess

RewriteRule ^search-(.+?)-(.+?)\.html$ /e/search/result/index\.php\?page=$1&searchid=$2
# Nginx 写进.conf
rewrite ^([^\.]*)/search-(.+)-(\d+).html$ $1/e/search/result/index.php?page=$2$searchid=$3 last;

D、修改搜索模板中的提交地址为绝对地址:

比如

<form action='http://www.zctou.com/e/search/index.php' method="post" name="search_news" id="search_news">

提示:不建议使用相对地址。