複製鏈接
請複製以下鏈接發送給好友

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。 [1] 
中文名
URL重寫
問    題
不支持Cookie
環    境
在應用程序的所有頁面中
包    括
所有的超鏈接和表單的action屬性

URL重寫標準化

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

URL重寫特別注意

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

URL重寫靜態化

URL重寫內容簡介

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

URL重寫需要兩步處理

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

URL重寫好處

URL重寫功能好處

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

URL重寫重寫式跟蹤

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

URL重寫優點

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

URL重寫重定向

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 提供的網站首頁

URL重寫注意事項

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

URL重寫新建方法

URL重寫操作方法

具體操作辦法(僅適用於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 去掉前面的#,並做下相應的修改即可。

URL重寫SEO用到功能

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

URL重寫重定代碼

截獲請求代碼
⒈要重寫,首先是截獲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框的內容。

URL重寫處理引擎

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。
  • ISAPI_Rewrite。
  • 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。
  • [1] 
2EEServlet
  • HttpRedirectFilter(開放源代碼)。
  • UrlRewriteFilter(開放源代碼-BSD)。
Lighttpd
  • mod_rewrite(lighttpd是一套開放源代碼的網頁服務器)。
參考資料
  • 1.    《Java Web編程技術》清華大學出版社