wordperss 的 url 重寫一般情況寫用不到,一般的,我們使用後臺固定連結設定就好了。

提示:要想看懂這個,得會一些正規表示式哦

那那些地方會用到呢?

一、有自定義文章型別。 WordPress 後臺固定連線設定是不會對自定義文章型別起作用的。

二、建立頁面。這裡說的建立頁面科不是簡單的頁面模板使用,比如你的網站有一個會員系統,前臺需要一個註冊頁面、會員資料頁面 (包括設定和修改頁面) 、會員的文章列表頁面,還有投稿頁面 (包括文章再次編輯),確實用自定義頁面模板也許可以做到這一點,但是如果你的主題是給別人用的,使用者能有這麼大精力來設定這些嗎?

WordPress 的重寫規則儲存於資料庫中,而不是在 .htaccess  檔案.

個人覺得 WordPress  url 重寫應該分兩個部分來理解 (如果錯誤的地方,還請各路高人糾正):

一、翻譯規則。 WordPress 執行機制是,所有請求都透過根目錄的 index.php 來呼叫,訪客透過一個網址來訪問網站的內容時,不管 url 是什麼,首先都呼叫 index.php,然後呼叫各個檔案,透過翻譯規則,來分析這個 url 要請求的內容是什麼,然後輸出內容。比如訪問 example.com/?p=123  首先呼叫 index.php 檔案,然後各種檔案呼叫,透過翻譯規則知道,這個 url 是要訪問 ID 為 123 的文章,如果你訪問 example.com/123.html,也是會首先呼叫 index.php 檔案,如果你後臺沒有設定自定義固定連結,那這個 url 就翻譯不了,也就是翻譯規則裡面沒有這麼一個型別的,那就會跑到 404 去了,如果你設定了固定連線,存在這麼一個翻譯規則,那麼就知道,這個 url 也是訪問 ID 為 123 的文章。這就是翻譯規則。

二、 「輸出規則」 。很簡單的,在我們的模板中 the_permalink() 函式是用來輸出一個連結的,那我們設定了固定連結之後,重寫規則就得輸出正確的地址,比如原來文章 url 是要輸出 example.com/?p=123,但是設定了重寫規則後,就會根據後臺設定的連結結構輸出 example.com/123.html 這樣的正確地址。

對於 Linux 主機來說,WordPress 預設的.htaccess 檔案裡面是這樣的:

  1. RewriteCond %{REQUEST_FILENAME} !-f   
  2. RewriteCond %{REQUEST_FILENAME} !-d   
  3. RewriteRule . /index.php [L]  

意思就是當伺服器收到請求後, 當接收到的請求不是一個檔案或目錄時,則會重寫為 WordPress 根目錄下的 index.php 檔案 (對於 wp-admin 和 wp-includes 這樣已經存在的目錄則不會重寫),然後 index.php 就開始處理請求。所以說偽靜態後都是從 index.php 檔案開始的。所以如果 WordPress 偽靜態得先讓主機支援重寫。

 

檢視已經存在的翻譯規則:

先看看你的網站已經存在的翻譯規則:

  1. function getRewriteRules() {   
  2.     global $wp_rewrite//global 重寫類   
  3.     return $wp_rewrite->rewrite_rules();   
  4. }  

如果你執行上面的 getRewriteRules 函式,將得到一個包含所有翻譯規則在內的陣列,如果你在網頁輸出或列印這個陣列,你會得到一大片的程式碼 (如果你的固定連結是預設形式,那就沒有翻譯規則,所以你會得到一個空陣列) 。類似:

  1. Array   
  2. (      
  3.     // ....      
  4.     [author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$1&feed=$2     
  5.     [author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$1&feed=$2     
  6.     [author/([^/]+)/page/?([0-9]{1,})/?$] => index.php?author_name=$1&paged=$2     
  7.     [author/([^/]+)/?$] => index.php?author_name=$1     
  8.     // ...   
  9. )  

看上面的程式碼,如果你訪問這樣一個地址:ashuwp.com/author/ashu 這個 url 會匹配上面的第四行規則,則會翻譯成 index.php?author_name=ashu,這就會顯示到名為 ashu 的作者頁面。如果你訪問 ashuwp.com/author/ashu/aaa 那麼沒有一個翻譯規則能匹配上,將會到 404 頁面。

檢視已經連線結構

前面是檢視了 url 的翻譯規則,WordPress url 重寫第二部分就是根據設定的連結結構輸出正確的連結,怎麼獲取連結結構呢?後臺選單中檢視設定-> 固定連結即可。如果你有不能檢視的,不如自定義文章型別:

  1. echo get_option('permalink_structure');  

直接獲取設定選項即可了。。