如何從瀏覽器的位址列(Address Bar)隱藏你正在瀏覽的網址

我們有個客戶的 ASP.NET 網站,主網站就架在網站的根目錄下 ( http://www.example.com/ ),而網站下又設定了 2 個子網站虛擬目錄 ( http://www.example.com/Site1/http://www.example.com/Site2/ ),彼此相依存在著。不過,根目錄下的主網站改版了,但虛擬目錄下的子網站並未改版,這導致子網站無法正常執行了!所以當改版完成後,只能將原本的主網站改另一個 Domain Name ( http://www2.example.com ) 才能讓原本的子網站繼續運作,但這時候客戶卻抱怨說為什麼子網站的網址變了,要求我們將網址回覆到原本的樣子。

這個事件最主要的抱怨點有如下幾點:

  1. 由於之前對外的文宣都是主打原本的網址,如今改變了會導致使用者無法連結到正確的網站。
  2. 之前有些已經加入我的最愛的人若下次進來可能會看不到網頁。
  3. 新的網址「感覺很怪」,一定要我們改回來。

那好吧,只好全部改回來,不過在技術上是有困難的(並非做不到),因為若要將原本的子網站放回去現在新的主網站內,勢必要修改許多子網站內的程式,或修正 web.config 設定檔才能正確無誤的轉移回來,不過因為新舊的架構不同,硬要這樣整合未來整個網站只會越來越亂,日後維護不易,所以我想了幾個可行的方法:

1. 採用最原始的「隱藏網址」作法,使用 FRAME 標籤

<html>
<head>
    <title>目的網站的標題要手動設定在此</title>
</head>
<frameset border="0" rows="100%,*" frameborder="no" margintop="0" marginright="0"
          marginbottom="0" marginleft="0">
    <frame src="http://www2.example.com/Site1/" scrolling="auto" 
           frameborder="no" border="0" noresize="noresize" />
    <frame topmargin="0" marginwidth="0" marginheight="0" 
           scrolling="no" frameborder="no" border="0" noresize="noresize" />
</frameset>
</html>

2. 採用前幾天介紹的 .NET URL Rewriter and Reverse Proxy 元件進行 Reverse Proxy 設定

設定方式很簡單,如下:

RewriteEngine on
RewriteRule ^/Site1/(.*)$ http://www2.example.com/Site1/$1 [P,NC]
其中的 P 就代表 Proxy 的意思,雖然跨網站無法使用 URL Rewriting 功能,但 .NET URL Rewriter and Reverse Proxy 依然可以支援 Reverse Proxy 功能,這也是我最愛他的地方。

我個人比較偏愛第 2 種作法,但魔鬼總是會出現在枝微末節的地方,我們的其中一個子網站 ( http://www.example.com/Site1/ ) 當中有幾支程式採用了 ASP.NET 2.0 的 Callback 技巧,且這幾支程式剛好都會「認網址」,也就是說網址跟原本的不相同就會發生 JavaScript Error 導致無法正常瀏覽。

採用 URL Rewrite 或 Reverse Proxy 架構對「原始的程式」來說,其實 ASP.NET 程式收到的 QueryString 或原本的伺服器變數(Server Variables)都是不變的。例如說:我子網站真正的網址是 http://www2.example.com/Site1/ABC.aspx?id=TEST,雖然透過 Reverse Proxy 網址變成 http://www.example.com/Site1/ABC.aspx?id=TEST,不過對 ABC.aspx 這支程式來說,Request.Url 依然是 http://www2.example.com/Site1/ABC.aspx?id=TEST 喔!但是對 JavaScript 來說,卻是 http://www.example.com/Site1/ABC.aspx?id=TEST。所以各位對 Client 與 Server 之間的差異一定要精準的釐清。

其實我還有想到另一個天兵的方法,就是把跟客戶比眼力!也就是「技巧性」的把網站網址改成類似以下的網站連結:

這個方法太瞎了,不過應該可以檔一段時間,呵呵~   XD

  

此文章由 will 發表於 2008/10/15 下午 09:08:29

永久連結 | 評論 (7) | 此文章的RSSRSS comment feed |

分類: ASP.NET | Web

標籤: ,

收藏:

相關文章

評論

十月 15. 2008 21:34

A`Vai Poitsonu

原來 IIS 也有類似 mod_rewrite 的東西呀Smile

A`Vai Poitsonu tw

十月 15. 2008 21:42

will

那是 ASP.NET 的,不是 IIS 的。
但是 IIS7 的確有個 URL Rewrite module: blogs.iis.net/.../urlrewrite-module-for-iis7.aspx

will tw

十月 15. 2008 23:32

Joe

這問題是子網站還是需要舊版的主網站嗎?否則同樣在"^/Site1/(.*)$"規則下,url還是一樣會被rewrite吧?
是否在新的主網站寫個httpHandler,如果UrlReferrer來源是子網站,直接用Server.transfer到www2的舊版主網站?這樣JavaScript過來的,應該還是能導到正確的位置?

Joe tw

十月 16. 2008 00:11

sholfen

最後一個方法害我笑到肚子痛XDDD

sholfen tw

十月 16. 2008 09:39

gattaca

兩個ww中夾兩個v還真是看不出來耶!
這算是紅塵禁招吧

gattaca tw

十月 16. 2008 12:19

darkthread

"比眼力法"在釣魚網站界應該已經做過不少研究,可以拿來參考,哈!!

darkthread tw

十月 16. 2008 12:30

will

Joe,
Server.Transfer 應該沒辦法「跨網站」喔!

will tw

新增評論


(將顯示您的Gravatar圖示)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



線上預覽

三月 15. 2010 23:34