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 文件裏面是這樣的:
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule . /index.php [L]
意思就是當服務器收到請求後, 當接收到的請求不是一個文件或目錄時,則會重寫為 WordPress 根目錄下的 index.php 文件 (對於 wp-admin 和 wp-includes 這樣已經存在的目錄則不會重寫),然後 index.php 就開始處理請求。所以説偽靜態後都是從 index.php 文件開始的。所以如果 WordPress 偽靜態得先讓主機支持重寫。
查看已經存在的翻譯規則:
先看看你的網站已經存在的翻譯規則:
- function getRewriteRules() {
- global $wp_rewrite; //global 重寫類
- return $wp_rewrite->rewrite_rules();
- }
如果你執行上面的 getRewriteRules 函數,將得到一個包含所有翻譯規則在內的數組,如果你在網頁輸出或打印這個數組,你會得到一大片的代碼 (如果你的固定鏈接是默認形式,那就沒有翻譯規則,所以你會得到一個空數組) 。類似:
- Array
- (
- // ....
- [author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$1&feed=$2
- [author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$1&feed=$2
- [author/([^/]+)/page/?([0-9]{1,})/?$] => index.php?author_name=$1&paged=$2
- [author/([^/]+)/?$] => index.php?author_name=$1
- // ...
- )
看上面的代碼,如果你訪問這樣一個地址:ashuwp.com/author/ashu 這個 url 會匹配上面的第四行規則,則會翻譯成 index.php?author_name=ashu,這就會顯示到名為 ashu 的作者頁面。如果你訪問 ashuwp.com/author/ashu/aaa 那麼沒有一個翻譯規則能匹配上,將會到 404 頁面。
查看已經連接結構
前面是查看了 url 的翻譯規則,WordPress url 重寫第二部分就是根據設置的鏈接結構輸出正確的鏈接,怎麼獲取鏈接結構呢?後台菜單中查看設置-> 固定鏈接即可。如果你有不能查看的,不如自定義文章類型:
- echo get_option('permalink_structure');
直接獲取設置選項即可了。。