POST TIME:2019-03-20 14:28
dedecms問答模塊如何靜態化
添加dedecms的問答模塊有助于被收錄的量及提高網站資訊量,有利于SEO的優化及排名,特別是對于圖片站來說,添加了問答模塊可以更好的提高收錄量,也有利于被懲罰站的
恢權重,如果你的站被懲罰了,那么添加個問答模塊還有利于加速恢復權重。
我們先來看下DedeCMS 5.7問答模塊的官方升級說明:
重構問答模塊,采用模塊MVC架構進行重構;
問答模塊支持偽靜態設置;
重新設計問答模塊前臺界面,新界面同系統整體界面一致;
客服中心采用新版問答模塊改版;
問答模塊增加對二級域名的支持。
通過上述說明,結合DedeCMS V5.7的問答源碼,基本可以確定兩個信息:
DedeCMS 5.7問答模塊仍然支持偽靜態;
由于織夢問答模塊升級,使用了新的URL形式,歷史版本的問答系統偽靜態規則已經不適用于新版了,這也DedeCMS 5.7問答偽靜態實現要解決的重點。
DedeCMS 5.7問答偽靜態高級解決方案
1)你的主機是否支持偽靜態?這點很重要,不然下面說再多也是白搭。簡單說明下,Apache服務器偽靜態實現需要借助.htaccess文件;IIS服務器偽靜態實現則需要加載Rewrite
組件,然后配置httpd.ini文件;
2)DedeCMS V5.7管理后臺-系統-系統基本參數-模塊設置,“是否使用Rewrite”選擇“是”,“問答模塊的二級域名”填寫“ask”;
這里為什么要填寫問答模塊的二級域名?因為小拼的偽靜態修改方法是參考DedeCMS V5.5和5.6問答的URL形式,目標URL以“.html”結尾,相信對使用過歷史版本問答系統的朋友
都不會陌生。
如:http://localhost/ask/question-4.html
這樣的URL在DedeCMS V5.7中會有一個問題,許多以“?ct=”開頭的鏈接都會訪問不了,如“我的提問”、“我的回答”、“提高懸賞”、“編輯/刪除問題”等,會產生404錯誤頁
面。
如:http://localhost/ask/question-4.html?ct=myask
其實這種現象的產生,主要是模板里鏈接的路徑問題,采用的都是相對路徑。而啟用問答模塊的二級域名,再結合模板修改就可以很好的解決。當然,你也可以修改模板,實現問
答全站偽靜態,只需多加幾條偽靜態規則即可。
3)DedeCMS 5.7問答偽靜態規則
IIS服務器偽靜態規則,在httpd.ini文件中加入:
#問答首頁
#RewriteRule ^(.*)/index.html $1/index.php
#問答詳細頁
RewriteRule ^(.*)/question-([0-9]+).html $1/?ct=question&askaid=$2
#問答一級欄目
RewriteRule ^(.*)/browser-1-([0-9]+).html $1/?ct=browser&tid=$2
#問答一級欄目分頁
RewriteRule ^(.*)/browser-1-([0-9]+)-page-([0-9]+).html $1/?ct=browser&tid=$2&page=$3
#問答子欄目
RewriteRule ^(.*)/browser-2-([0-9]+).html $1/?ct=browser&tid2=$2
#問答子欄目分頁
RewriteRule ^(.*)/browser-2-([0-9]+)-page-([0-9]+).html $1/?ct=browser&tid2=$2&page=$3
# 精彩推薦、待解決問題、高懸賞問題、新解決問題、零回答問題、快到期問題(包括一級欄目、子欄目及其分頁)
RewriteRule ^(.*)/browser-([0-9]+).html $1/?ct=browser&lm=$2
RewriteRule ^(.*)/browser-([0-9]+)-page-([0-9]+).html $1/?ct=browser&lm=$2&page=$3
RewriteRule ^(.*)/browser-1-([0-9]+)-([0-9]+).html $1/?ct=browser&tid=$2&lm=$3
RewriteRule ^(.*)/browser-1-([0-9]+)-([0-9]+)-page-([0-9]+).html $1/?ct=browser&tid=$2&lm=$3&page=$4
RewriteRule ^(.*)/browser-2-([0-9]+)-([0-9]+).html $1/?ct=browser&tid2=$2&lm=$3
RewriteRule ^(.*)/browser-2-([0-9]+)-([0-9]+)-page-([0-9]+).html $1/?ct=browser&tid2=$2&lm=$3&page=$4
#全部分類
RewriteRule ^(.*)/type.html $1/?ct=type
#問答搜索
RewriteRule ^(.*)/search.html $1/?ct=search
#總積分排行 周積分上升排行 查看個人信息
RewriteRule ^(.*)/myask-view-([0-9]+).html $1/?ct=myask&ac=view&mid=$2
Apache服務器偽靜態規則,在.htaccess文件中加入:
RewriteRule ^index.html$ index.php
RewriteRule ^question-([0-9]+).html$ ?ct=question&askaid=$1
RewriteRule ^browser-1-([0-9]+).html$ ?ct=browser&tid=$1
RewriteRule ^browser-1-([0-9]+)-page-([0-9]+).html$ ?ct=browser&tid=$2&page=$3
RewriteRule ^browser-2-([0-9]+).html$ ?ct=browser&tid2=$1
RewriteRule ^browser-2-([0-9]+)-page-([0-9]+).html$ ?ct=browser&tid2=$2&page=$3
RewriteRule ^browser-([0-9]+).html$ ?ct=browser&lm=$1
RewriteRule ^browser-([0-9]+)-page-([0-9]+).html$ ?ct=browser&lm=$1&page=$2
RewriteRule ^browser-1-([0-9]+)-([0-9]+).html$ ?ct=browser&tid=$1&lm=$2
RewriteRule ^browser-2-([0-9]+)-([0-9]+)-page-([0-9]+).html$ ?ct=browser&tid2=$1&lm=$2&page=$3
RewriteRule ^browser-2-([0-9]+)-([0-9]+).html$ ?ct=browser&tid2=$2&lm=$3
RewriteRule ^browser-2-([0-9]+)-([0-9]+)-page-([0-9]+).html$ ?ct=browser&tid2=$1&lm=$2&page=$3
RewriteRule ^type$ ?ct=type
RewriteRule ^search.html$ ?ct=search
RewriteRule ^myask-view-([0-9]+).html$ ?ct=myask&ac=view&mid=$1
DedeCMS 5.7問答偽靜態修改注意事項
1)注意備份你站點的ask文件夾,防止出錯,方便還原;
2)以上的問答偽靜態僅供DedeCMS5.7 GBK版本使用,UTF版本請自行轉換下代碼;
3)考慮到SEO,很多織夢老用戶都是V5.1~V5.6版本升級至V5.7的,小拼提供的修改辦法保證了歷史問答版本URL的一致性,否則URL改變是很影響搜索引擎收錄和排名的;
4)你可以參考下小拼的問答偽靜態實現思路,總結出一套符合個人站點風格的偽靜態方法。
DedeCMS 5.7問答偽靜態初級解決方案
如果你怕麻煩,還心存疑慮,那就直接使用官方默認的偽靜態方法了,僅實現問答欄目頁和詳細頁的偽靜態,可以使用下面的偽靜態規則:
IIS服務器,在httpd.ini文件中加入:
#問答首頁
#RewriteRule ^(.*)/index.html $1/index.php
#問答詳細頁
RewriteRule ^(.*)/([0-9]+).html $1/?ct=question&askaid=$2
#問答一級欄目
#RewriteRule ^(.*)/([0-9]+) $1/?ct=browser&tid=$2
#問答子欄目
#RewriteRule ^(.*)/t([0-9]+) $1/?ct=browser&tid2=$2
Apache服務器,在.htaccess文件中加入:
RewriteRule ^index.html$ index.php
RewriteRule ^([0-9]+).html$ ?ct=question&askaid=$1
RewriteRule ^([0-9]+)$ ?ct=browser&tid=$1
RewriteRule ^t([0-9]+)$ ?ct=browser&tid2=$1
好了,關于DedeCMS 5.7問答模塊偽靜態的實現方法就介紹到這里,有什么不明白的地方請在下面留言
問答模塊的游客提問 管理員回答
一:只允許管理員回答
找到dedecms5.7的/ask/control目錄下的question.php文件,找到其中的這樣一段代碼并增加以下紅色部分代碼:
<?php if($cfg_ml->isAdmin == 1) { ?>
<div>
<form method=”post” name=”answer” action=”?ct=question&ac=answer&askaid=<?php echo $question['id']; ?>”>
<h3><span>我來回答這個問題</span></h3>
<div><?php GetFck(“content”,””,400);?></div>
<div><span>回答即可得<?php echo $cfg_ask_answerscore;?>分,回答被采納則獲得懸賞分以及獎勵<?php echo $cfg_ask_bestanswer;?>分。</span><span><label>
<?php
if($GLOBALS['cfg_ask_guestanswer'] == ‘Y’)
{
?>
<input name=”anonymous” type=”checkbox” value=”1″/>匿名回答</label><?php
}
?></span><button type=”submit”>提交回答</button></div>
</form>
</div>
<?php } ?>
二:允許游客提問
找到dedecms5.7的/ask/control目錄下的question.php文件,找到其中的這樣一段代碼并刪除:
if(empty($this->cfg_ml->M_ID))
{
ShowMsg(‘您尚未登錄,請先登錄’,$GLOBALS['cfg_ask_member']);
exit;
}
if($this->cfg_ml->M_Spacesta < 0)
{
ShowMsg(‘您還沒有通過審核,暫時不能提問,請耐心等….’,’-1′);
exit;
}
刪除以上一段代碼后可進入提問頁面,但是依然發布不了,提示:“您尚未登錄,請先登錄”
三:解決 “您尚未登錄,請先登錄”
找到找到并刪除dedecms5.7的/ask/control目錄下的myask.php文件
if(empty($this->cfg_ml->M_ID))
{
ShowMsg(‘您尚未登錄,請先登錄’,$GLOBALS['cfg_ask_member']);
exit;
}
找到找到并刪除dedecms5.7的/ask/control目錄下的search.php文件
if(empty($cfg_ml->M_ID))
{
ShowMsg(‘您尚未登錄,請先登錄’,$GLOBALS['cfg_ask_member']);
exit;
}
if($cfg_ml->M_Spacesta = 0)
{
ShowMsg(‘您還沒有通過審核,暫時不能提問,請耐心等….’,’-1′);
exit;
}
刪除以上一部分之后 可進入發布了,可是發不后又提示:“請勿重復回復同一問題”
四:游客問答,提示“請勿重復回復同一問題”:
同樣找到并刪除dedecms5.7的/ask/control目錄下的question.php文件,找到其中的這樣一段代碼:
if($rs)
{
ShowMsg(‘請勿重復回復同一問題!’,’-1′);
exit;
}
和
if($rs){
ShowMsg(‘請不要重復發布同一問題,請耐心等待解答..’, “index.php”);
exit;
}
到此,想要實現的功能都已經基本上實現了。最后在附送其他幾個問題的解決辦法,如果有用到可以參考。
五:問題已過期、提問者自己不能回答自己的問題
同樣找到找到并刪除dedecms5.7的/ask/control目錄下的question.php文件,找到其中的這樣一段代碼
if($question)
{
if($question['uid'] == $this->cfg_ml->M_ID)
{
ShowMsg(‘提問者自己不能回答自己的問題’, ‘-1′);
exit;
}else if($question['expiredtime'] < $GLOBALS['cfg_ask_timesasdp']){
ShowMsg(‘問題已經過期’,’-1′);
exit;
}
$data['tid'] = $question['tid'];
$data['tid2'] = $question['tid2'];
$data['userip'] = getip();
}else{
ShowMsg(‘回答的問題不存在’,’-1′);
exit;
}
六:“驗證碼錯誤!”“驗證問題答案錯誤”
找到找到并刪除dedecms5.7的/ask/control目錄下的question.php文件
if(preg_match(“#7#”,$GLOBALS['safe_gdopen'])){
$svali = GetCkVdValue();
if(strtolower($data['vdcode']) != $svali || $svali==”)
{
ResetVdValue();
ShowMsg(‘驗證碼錯誤!’, ‘-1′);
exit();
}
}
//檢查驗證問題
$faqkey = isset($data['faqkey']) && is_numeric($data['faqkey']) ? $data['faqkey'] : 0;
if($GLOBALS['gdfaq_ask'] == ‘Y’)
{
global $safefaqs;
if($safefaqs[$faqkey]['answer'] != $data['safeanswer'] || $data['safeanswer'] ==”)
{
ShowMsg(‘驗證問題答案錯誤’, ‘-1′);
exit();
}
}