URL重寫

URL重寫就是首先獲得一個進入的URL請求然後把它重新寫成網站可以處理的另一個URL的過程。舉個例子來說,如果通過瀏覽器進來的URL是“UserProfile.aspx?ID=1”那么它可以被重寫成 “UserProfile/1.aspx”,這樣的URL,這樣的網址可以更好的被網站所閱讀。

如果瀏覽器不支持Cookie或用戶阻止了所有Cookie,可以把會話ID附加在HTML頁面中所有的URL上,這些頁面作為回響傳送給客戶。這樣,當用戶單擊URL時,會話ID被自動作為請求行的一部分而不是作為頭行傳送回伺服器。這種方法稱為URL重寫(URL rewriting)。

一般來說,URL重寫是支持會話的非常健壯的方法。在不能確定瀏覽器是否支持Cookie的情況下應該使用這種方法。然而,使用URL重寫應該注意下面幾點:

1.如果使用URL重寫,應該在應用程式的所有頁面中,對所有的URL編碼,包括所有的超連結和表單的action屬性值。

2.應用程式的所有的頁面都應該是動態的。因為不同的用戶具有不同的會話ID,因此在靜態HTML頁面中無法在URL上附加會話ID。

3.所有靜態的HTML頁面必須通過Servlet運行,在它將頁面傳送給客戶時會重寫URL。

基本介紹

  • 中文名:URL重寫
  • 問題:不支持Cookie
  • 環境:在應用程式的所有頁面中
  • 包括:所有的超連結和表單的action屬性
標準化,特別注意,靜態化,概述,需要兩步處理,好處,功能好處,重寫式跟蹤,優點,重定向,製作404頁面,注意事項,新建方法,操作方法,SEO用到功能,重定代碼,處理引擎,Apache,2EEServlet,Lighttpd,

標準化

概述
URL標準化,英文:urlcanonicalization來自matt cutts的部落格文章:SEO advice: url canonicalization 中文翻譯:SEO的建議:URL標準化 “URL標準化”是一個動名詞,不好直接解釋,我把它反過來一下:
標準化URL
很多情況下,我們認為以下這幾個連結都指向同一個頁面(首頁):
但是從URL傳送請求並返回網頁內容的過程來看,這些URL都是互不相同的。對於上述URLs,Web伺服器完全可以返回完全不同的內容。當這些URL所對應的內容都一樣時(一般情況下都一樣的),谷歌需要從上述URLs中選一個具有代表性的,而忽略其餘的。那么這個被谷歌選擇了的URL,就是一個標準化的URL。谷歌選擇的這個過程稱為“標準化”。

特別注意

根據不同的伺服器就會有不同的URL重寫規則,比如 iis apache nginx 這三種重寫方式都是不同的,並非完全一樣的。

靜態化

概述

這是SEO過程中經常碰到的問題,也是必須解決的問題。因為搜尋引擎喜歡靜態頁面。從Web伺服器的角度,這個問題轉變為:如何將靜態化的檔案名稱稱轉化成參數。

需要兩步處理

⒈把網頁上帶連結的地方,都換上新的靜態化連結。搜尋引擎和瀏覽器將通過該連結來發生請求。(有些人做修改不是在網頁上,而是進行動態連結靜態連結的轉向,這是嚴重錯誤的)
⒉在httpd.conf或.htaccess中使用RewriteRule:
RewriteRule "^/dir/ ([^./]*) \.html" "/dir/script.cgi?doc=$1" [PT]
[PT]標記告訴Apache執行後續的所有操作。
通過這個功能,使動態頁面以靜態連結的形式展示給搜尋引擎,從而達到URL最佳化的目的。

好處

功能好處

重寫URL是非常有用的一個功能,因為它可以讓你提高搜尋引擎閱讀和索引你的網站的能力;而且在你改變了自己的網站結構後,無需要求用戶修改他們的書籤,無需其他網站修改它們的友情連結;它還可以提高你的網站的安全性;而且通常會讓你的網站更加便於使用和更專業。

重寫式跟蹤

當客戶機不接受cookie時,server就使用URL重寫作為會話跟蹤的基本方式.URL重寫,添加了附加數據(會話ID)到請求的URL路徑上.
會話ID必須被編碼作為該URL字元串中的路徑參數。該參數的名稱為jsessionid,
例如:
index.html;jsessionid=1234

優點

⒈縮短url,隱藏實際路徑提高安全性。
⒉易於用戶記憶和鍵入。
⒊易於被搜尋引擎收錄。

重定向

製作404頁面

很多時候,我們考慮把無效的URL比如:用戶拼錯的URL、不存在的URL重定向到別的網頁,例如網站的首頁、404頁面等。
在httpd.conf或.htaccess檔案中使用ErrorDocument來捕獲404 (找不到檔案)錯誤:
ErrorDocument 404 /index.html
DirectoryIndex index.html /path/to/notfound.html
本功能會讓所有的404錯誤——每次當某人請求無效的URL 時,都返回URL / index.html 提供的網站首頁

注意事項

⒈直接指向首頁是否是合適的?或者讓它指向到一個404頁面會更好些?如果在404頁面用javascript做一個跳轉到首頁,也是SEO允許的做法。
⒉即使返回有效的檔案,仍然會將404 狀態碼返回給客戶端和搜尋引擎。這表示搜尋引擎機器人來確認網站上的連結時,仍然會得到正確的結果(404狀態碼)。

新建方法

操作方法

具體操作辦法(僅適用於apache網路伺服器):
檔案位置:apache->conf->httpd.conf
請在httpd.conf中使用Alias指令:
Alias /newurl/www/htdocs/oldurl
如:用戶訪問新的地址/newurl/id34.html 伺服器將提供的內容原地址是/www/htdocs/oldurl/id34.html。
注意:Alias只會改變本地URL,如/newurl/id34.html 的/newurl/id34.html 部分,而無法改變URL的主機名稱部分若要更改URL的主機名稱部分,請使用Redirect或RewriteRule指令。
菜鳥指南:本功能的Alias指令在 httpd.conf中是這一句:#Alias /webpath /full/filesystem/path 去掉前面的#,並做下相應的修改即可。

SEO用到功能

⒈當檔案移動或檔案目錄名稱發現改變,出於SEO需要,你需要保持舊的URL;
⒉網站改版了,網站導航和連結發生變化,為了繼續持有原連結帶來的流量,你需要保持舊的URL;
⒊你希望不同的人用不同URL來連結同一個的內容。(SEO一般不建議這樣做)

重定代碼

截獲請求代碼
⒈要重寫,首先是截獲url請求,然後分析當時的url,最後跳轉到相應的頁面.所以我們第一步是要截獲url請求.為此新建一個類庫叫URL,在該類庫中引用URLRewriter.dll.新建一個類myrewritter.cs,代碼如下
namespace URL
{
public class myrewritter : URLRewriter.BaseModuleRewriter
{
protected override void Rewrite(string requestedPath,HttpApplication app)
{
if (requestedPath.Contains("news/2011/3/2.html"))
app.Context.RewritePath("/news.aspx?id=2&year=2011&month=3");
else
app.Context.RewritePath("/here.aspx");
}
}
}
可以看到該類繼承了URLRewriter.BaseModuleRewriter。只要當前的url請求是news/2011/3/2.html,我們就會將頁面重寫到/news.aspx?id=2&year=2011&month=3.
這只是一個簡單的例子,實際上對於url的判斷,一般是用正則表達式來完成.而頁面和頁面間的對應關係,可能需要通過查詢資料庫完成.
web.config代碼
接下來在網站項目中引用這個類庫.然後修改下web.config,下面的:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<httpModules>
<add type="URL.myrewritter" name="URL" />
</httpModules>
<compilation debug="true" />
<authentication mode="Windows" />
</system.web>
</configuration>
步驟總結
大家可以看到我新加了個httpModules.這個的作用是,如果有url請求,asp/net會先把請求傳到你指定的這個類中來.add那一行了,前面的是要接收請求的類,後面的是這個類所在的dll的名字.
添加完這一句後,一切就快結束了.由於我們要處理的是.html的頁面,所以需要配置下iis.因為默認asp/net的處理引擎不會管.html.我們要做的是用處理asp .net的那個程式來處理html頁面.打開iis.找到你的網站,點右鍵打開屬性.找到主目錄(Home Directory),打開配置(Configuration)對話框. 在Application extensions列表里找到.aspx,點擊編輯(Edit...),複製Executable框的內容。

處理引擎

Apache

  • mod_rewrite,Apache 官方的 URL Rewriting 模組
  • mod_alias,Apache 1.3 的 URL 別名模組
Microsoft Internet Information Server(IIS)
  • URL Rewrite Module for IIS 7.0,由微軟官方發展
  • IIS Mod-Rewrite。
  • IISRewrite。
  • URL Replacer。
  • Ionic's ISAPI Rewrite Filter (IIRF),無須 .NET,免費的開放原始碼組件。
  • .NET URL Rewriter and Reverse Proxy,免費的 URL Rewriting 與反向代理組件,支持 .NET 2.0/3.5,IIS 6.0/7.0。

2EEServlet

  • HttpRedirectFilter(開放原始碼)。
  • UrlRewriteFilter(開放原始碼-BSD)。

Lighttpd

  • mod_rewrite(lighttpd是一套開放原始碼的網頁伺服器)。

相關詞條

熱門詞條

聯絡我們