2009-02-15 101 views

回答

2

我不熟悉的IIS 7重寫模塊,但ISAPI_Rewrite可以改變幾乎任何你想要的HTTP標頭。有一個免費版本,這對我們的網站來說已經足夠了,可能已經足夠用於你的網站了。

+0

我不想做重定向。相反,我想更改當前請求的{HTTP_HOST}。 – 2009-02-15 08:48:55

+0

ISAPI_Rewrite可以做到這一點 - 它可以爲當前請求更改「主機:」HTTP標頭,就像它「重寫」一個URL時不會發送重定向到客戶端一樣。 – EMP 2009-02-15 09:58:04

1

如果你想避免重定向(根據你對Evgeny的評論),唯一的選擇是server.transfer。使用server.transfer將處理髮送到服務器上的不同頁面,客戶端不知道(在頁面之間沒有往返客戶端的往返)。

除了server.transfer實際的重定向是非常典型的ISAPI_Rewrite是一個流行的工具,並且Evgeny提到的非常有效。

0

更新:這將做重定向,而不是重置變量。因爲我覺得它的整潔,我不會刪除這個答案,但它不回答你想

我的Economist.com

這樣做是一個非常簡單的方式正是您有一個站點中的兩個IIS網站,他們共享相同的webroot。主IIS網站保持不變,正在監聽當前主機頭,例如

216.35.68.215 economist.com 

另一個IIS站點在輸入其他主機頭部的情況下監聽IP地址。

216.35.68.215 economist.co.uk 

在「主目錄」第二網從有重定向設置將糾正任何主機名的人在你的網站上

集「上面輸入的準確URL」到達和 「此資源的永久重定向」,並輸入您的完全合格的主機名條目如下

http://www.economist.com $ S $ Q

$ S $ Q將維護您輸入的其他主機名稱上的所有URL。

隨意測試這個

http://www.economist.co.uk/world/americas/

只會推你

http://www.economist.com/world/americas/

這意味着你不必跑,至少因爲這個原因,在相當昂貴的IIS重寫模塊

3

是的,可以使用IIS 7重寫模塊。您可以使用GUI根據this blog post在IIS7中設置重定向。
也可以使用每個this SO answer的命令行。
在這兩個例子中,你必須有一個單獨的網站設置與自己的主目錄,並綁定到你想要重定向的域。我希望這是有道理的。

3

IIRF是免費的,並允許您重寫頭文件,包括HTTP_HOST。

我想重寫http://abc.xyz.com/ *至http://xyz.com/sites/abc/ *。這是針對內部使用{HTTP_HOST}的SharePoint網站完成的。

您需要重寫Host和Url。這使它有點複雜。在這個規則集,我這樣做的步驟,並使用新的報頭存儲步驟之間的狀態:

# detect whether we're using the abc host 
RewriteCond  %{HTTP_HOST}   ^abc\.xyz\.com$ 
RewriteHeader Host-Needs-Rewrite: ^$     YaHuh 

# rewrite the Host: header to the alt host name if necessary 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^YaHuh$ 
RewriteCond  %{HTTP_HOST}     ^(?!xyz\.com)(.+)$ 
RewriteHeader Host:   .*   xyz.com 

# rewrite the Url to the appropriate place 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^YaHuh$ 
RewriteCond  %{HTTP_HOST}     ^xyz\.com$ 
RewriteRule  /(.*)$      /sites/abc/$1  [L] 

你可以通配符ABC的一部分了。像這樣:

# detect whether we're using the abc host 
RewriteCond  %{HTTP_HOST}   ^([^.]+)\.xyz\.com$ 
RewriteHeader Host-Needs-Rewrite: ^$      %1 

# rewrite the Host: header to the alt host name if necessary 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^.+$ 
RewriteCond  %{HTTP_HOST}     ^(?!xyz\.com)(.+)$ 
RewriteHeader Host:   .*   xyz.com 

# rewrite the Url to the appropriate place 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^(.+)$ 
RewriteCond  %{HTTP_HOST}     ^xyz\.com$ 
RewriteRule  /(.*)$      /sites/%1/$1  [L]