Discuz! X2 後台 SEO
設置中,只需站長選擇要進行擬靜態的項目,然後查看對應規則,添加到服務器即可,很方便。但有些站長對默認規則不太滿足,還需進行優化,修改。那麼,就
Discuz! X2 的偽靜態規則進行一下講解,本例基於 Apache 的,其它版本再續。
首先看看 Discuz! X2 全部項目的擬靜態規則,拿虛擬主機舉例:
- # 將 RewriteEngine 模式打開
- RewriteEngine On
- # 修改以下語句中的 /discuz 為你的論壇目錄地址,如果程序放在根目錄中,請將 /discuz 修改為 /
- RewriteBase /discuz
- # Rewrite 系統規則請勿修改
- RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^topic-(.+).html$ portal.php?mod=topic&topic=$1&%1
- RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^article-([0-9]+)-([0-9]+).html$ portal.php?mod=view&aid=$1&page=$2&%1
- RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^forum-(w+)-([0-9]+).html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
- RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$
forum.php?mod=viewthread&tid=$1&extra=page%3D$3&page=$2&%1 - RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^group-([0-9]+)-([0-9]+).html$ forum.php?mod=group&fid=$1&page=$2&%1
- RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^space-(username|uid)-(.+).html$ home.php?mod=space&$1=$2&%1
- RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^blog-([0-9]+)-([0-9]+).html$ home.php?mod=space&uid=$1&do=blog&id=$2&%1
- RewriteCond %{QUERY_STRING} ^(.*)$
- RewriteRule ^archiver/(fid|tid)-([0-9]+).html$ archiver/index.php?action=$1&value=$2&%1
RewriteEngine On 這個是必須的,開啓狀態。
修改以下語句中的 /discuz 為你的論壇目錄地址,如果程序放在根目錄中,請將 /discuz 修改為 /。
這句話很多人不太理解,它的意思就是説,虛擬主機往往根目錄不是對外能直接訪問的,如果你站點是裝在類似/discuz/這樣的目錄下,那麼,
/discuz 就改成你安裝站點的目錄,如/www 、/wwwrooot,如果是直接安裝在根目錄了,那就去掉 discuz,只留個/。
以下的語句,我們發現,只有兩種:
RewriteCond
RewriteRule
RewriteCond 是重寫條件,它符合條件了,就執行 RewriteRule ,即重寫規則。
它倆的區別在於,RewriteCond 是字符串在前面,正則表達式在後面,而 RewriteRule 正則表達式在前,字符串在後。
手冊中的解釋:
RewriteRule 為重寫引擎定義重寫規則,語法,RewriteRule Pattern Substitution [flags]
RewriteRule 指令是重寫引擎的根本。此指令可以多次使用。每個指令定義一個簡單的重寫規則。這些規則的定義順序尤為重要——在運行時,規則是按這個順序逐一生效的。
[url=]Pattern[/url] 是一個作用於當前 URL 的 perl 兼容的 [url=] 正則表達式 [/url] 。"當前 URL"是指該規則生效時刻的 URL 的值。它可能與被請求的 URL 截然不同,因為其他規則可能在此之前已經發生匹配並對它做了改動。
重寫規則中的 [url=]Substitution[/url] 是當原始 URL 與 Pattern 相匹配時,用來替代 (或替換) 的字符串。
簡單點説,Pattern 就是參數,一般為一些文件的擴展名,Substitution 是用來替換前面用的。
舉例説明:
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^forum-(w+)-([0-9]+).html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
請求的字符串%{QUERY_STRING} 為任意^(.*)$時,執行 RewriteRule,當來訪地址為^forum-(w+)-([0-9]+).html$這樣的地址,也就是 forum-(數字、字母、下劃線)-(數
字).html 這樣的地址,則 Apache 把它解析為 forum.php?mod=forumdisplay&fid=$1&
page=$2&%1 也就是 forum.php?mod=forumdisplay&fid=$1($1 的意思是前面的 (w+))&
amp;page=$2($2 的意思是 ([0-9]+))&%1(%1 這裏就可以忽視了,其它字符串程序就不做處理了。) 。
很多情況下,站長做過搬家,調整版塊等等,需要做些跳轉,也可以通過這個擬靜態滿足需求。這裏就不一而足。