SEO 友好的URL和重定向應用

2021-06-20 19:17:08 字數 3426 閱讀 4862

之前的提到搜尋引擎的索引排名的基礎就是鏈結,而實際站點中鏈結都是指向的url位址的,url是明顯影響單擊率的因素。url是乙個頁面的所有內容的位址,除了要對使用者友好外(url位址命名),最關鍵的就是對搜尋引擎友好,因為這是每個頁面索引的基礎。

1、對搜素引擎排名有好處,在正式的排名中url位址起到的作用估計佔到20%,主要是為了增加單擊和一目了然的關聯性。

2、滑鼠經過鏈結文字時,url會出現在瀏覽器狀態列,可以吸引單擊。

定義為不包括查詢字串的url位址。這樣指向無引數的php指令碼的url也是靜態的。即時是由php指令碼生成的靜態url,對搜尋引擎也不會有任何問題。

包括乙個用「?」開始的查詢字串,用於傳遞引數的url。對於不同的查詢字串會有不同的輸出內容,搜尋引擎會當成是不同的頁面,但其實是同乙個php指令碼生成的。但是指令碼可能對不同的查詢字串輸出同樣的內容,這就可能導致重複內容的出現。同時,搜尋引擎可能會嘗試去掉多餘引數,這樣建立的索引可能有大量重複內容。

基於apache伺服器的rewrite_module模組進行的的url重寫是非常的強大的乙個功能,提供了乙個基於正規表示式分析器的重寫引擎來實時重寫url請求。

需要在apache的伺服器配置檔案http.conf中開啟

loadmodule  rewrite_module modules/mod_rewrite.so

分為伺服器級(http.conf)和目錄級(.htaccess)配置方式,兩種配置的書寫方式都相同。一般情況下優先使用前者,除非沒有對主配置檔案的訪問許可權。使用allowoverride啟用了.htaccess檔案後,apache每次都在所有目錄中查詢.htaccess檔案,無論是否真的存在或用到,將會導致效能下降。另外,apache必須在所有上級目錄中查詢.htaccess檔案,從而使所有的指令都生效。同時,啟用.htaccess修改許可權後,會更改伺服器的配置,從而可能帶來意想不到的修改。

格式:rewritecond   teststring   condpattern [flag]

teststring首先被計算,然後與condpattern比較以獲得結果。可以在測試前使用感嘆號作為字首「!」,可以實現條件的反轉。可以使用的條件測試有:

teststring>condpattern   teststringteststring=condpattern  (使用字典順序比較,二者都看做純字串)

-d  (目錄):將teststring看做乙個路徑名測試是否存在這個目錄

-f  (檔案):將teststring看做乙個常規檔案測試是否存在

-s  (非空的常規檔案):將teststring看做乙個檔名測試是否存在且大小大於0

-l  (符號連線):將teststring看做乙個是否是存在的乙個符號連線檔案

-x  (可執行):將teststring看做乙個路徑名測試是否存在這個目錄

-f  (對子請求存在的檔案):測試是否為乙個有效的檔案,在伺服器當前訪問控制配置下範圍。用乙個內部子請求來檢測,會降低伺服器效能慎用。

-u  (對子請求存在的url):檢查是否為乙個有效的url,在伺服器當前訪問控制配置下範圍。用乙個內部子請求來檢測,會降低伺服器效能慎用。

追加標記:

『nocase|nc』:忽略大小寫               『ornext|or』: 或下一條件

格式:rewriterule pattern  substitution flag]

反向引用使用 「$n」(0<=n <=9),對rewritecond最後匹配的反向引用使用「%n」,對伺服器變數的引用使用「%」,對rewritemap中定義的函式的引用「$」。

重寫規則按定義順序依次替換,知道所有規則處理完畢,除非使用l標記終結。

追加標記:

『chain | c』:鏈結下乙個規則。如果乙個規則匹配則繼續處理後續規則,如果不匹配,其後繼規則將跳過不執行。

『cookie | co=name:val:domain[:lifetime[:path]]』:用於在客戶端設定乙個cookie。

『env | e=var:val』:將環境變數var設定為val。

『forbidden | f』:強制禁止當前url,立即返回乙個403的http狀態碼。

『gone | g』:強制廢棄當前url,返回乙個410的http狀態碼。

『handler | h=content-handler』:強制定義目標檔案的內容處理器為content-handler。

『last | l』:立即停止重寫操作。

『next |n』:重新執行重新操作,類似continue,此時再次處理的url已經不是原始的url了,而是上一次最後一條規則重寫後的url。要避免死迴圈。

『nocase | nc』:pattern中忽略大小寫。

『noescape | ne』:輸出中不對uri進行轉義

『nosubreq | ns』:不對內部子請求進行處理

『proxy | p』:強制為**請求傳送,並立即中斷重寫處理。

『passthrough | pt』:移交給下乙個處理器。

『redirect | r[=code]』:強制執行乙個外部重定向,沒有指定code,就產生乙個302臨時性移動的http響應碼。

『skip | s=num』:強制跳過當前規則之後的num個規則繼續執行,可以模擬if-then-else結構。

『type | t=mime-type』:強制目標檔案的mime型別為mime-type。

在實際重寫的過程中,主要的問題就是rewriterule的書寫了,特別使用的是正規表示式進行,其中對於url中的不同變數的的分隔符問題需要注意,空格一定要換成分隔符,破折號比下劃線作為分隔符更好,因為下劃線將多個部分連線起來後算作了同乙個字元,不利於url語義,而破折號則是搜尋引擎的分隔符分割語句。

前面說過搜尋引擎對同樣的重複頁面會進行懲罰,不利於搜尋引擎,同時對於更換鏈結的頁面也需要使用重定向技術,避免損失之前積累的鏈結價值。

300:多個選擇    301:永久轉移   302:臨時移動   303:見其他   304:未修改    305:使用**    307:臨時重定向

重定向的串聯次數一般不能超過3次,實際應用中只有301和302被用於重定向。

rewriterule ^foo\.php$ /bar.php [r=301,l]
這條規則將foo.php重定向到bar.php,對於php指令碼來說,可以不是用重寫規則實現,直接使用header函式,返回乙個含有location的頭,當沒有明確提供狀態碼時預設為302臨時重定向。

當有多個網域名稱過期或重新配置後,需要將來自原來的網域名稱的請求都重定向到新的網域名稱,那麼可以這樣配置:

rewriteengine on

rewritecond % !^www\.example\.com

rewriterule ^(.*)$ [r=301,l]

url的友好是對搜尋引擎進行索引排名的一大關鍵因素,利用好各種重寫規則構造好的url,是非常的重要的一步。

重定向 重發和重定向有什麼區別與重定向應用

方式1 request.getrequestdispatcher new.jsp forward request,response 到new.jsp 方式2 apage.jsp 方式一 response.sendredirect new.jsp 重定向到new.jsp 方式二 new.jsp 重定向...

cmd命令 簡單重定向應用

前言 重定向輸出 幾乎所有的命令都將輸出傳送到命令提示符視窗。即使將輸出傳送到驅動器或印表機的命令也會在命令提示符視窗顯示訊息和提示。重定向輸入 要通過鍵盤將輸入重定向到檔案或裝置,請使用 操作符。首先 include includeusing namespace std int main stri...

簡單的重定向URL

看看自己blog,發現www改稱了自己的名字,比如我的就是xucanzhao,原來的blog都是www.cnblogs.com xucanzhao,其實你輸入這個位址還是可以得到自己的blog位址的,不相信你試一下 假如你的使用者名稱是jay123,那麼你的blog就是現在你輸入www.cnblog...