2013-03-06 70 views
5

我希望這不是我第一次在SO上提出這個問題。如何在asp.net中將URL重寫爲子域而不實際創建服務器上的子域

我已經在我的網站網址和使用query string值 例如:http://foo.com/xyzPage.aspx?barvalue=yehaa

http://yehaa.foo.com/

請建議如何才能實現無實際上在服務器上創建子域名 ..

我已經IIS 7.5安裝服務器上,並使用Asp.net 4.0

非常感謝

+0

您可以使用IIS的重寫模塊來完成此操作。 – cheesemacfly 2013-03-06 21:08:33

+0

請舉個例子..? – 2013-03-07 06:47:00

回答

12

編輯以下我們的看法:

要使用http://yehaa.foo.com/http://foo.com/xyzPage.aspx?barvalue=yehaa訪問,你必須使用以下規則:

<rules> 
    <rule name="Rewrite subdomains"> 
     <match url="^/?$" /> 
     <conditions> 
      <add input="{HTTP_HOST}" pattern="^(.+)\.foo\.com$" /> 
     </conditions> 
     <action type="Rewrite" url="http://foo.com?barvalue={C:1}" /> 
    </rule> 
</rules> 

它結束與否與每個URL匹配一個/並在foo.com之前使用某些東西,然後將其重寫爲http://foo.com?barvalue={C:1},其中在foo.com之前輸入的值是。

如果您想阻止人們直接訪問http://foo.com?barvalue={C:1},則可以使用下面的規則。


你可以通過在web.config文件中添加下列規則使用Rewrite module for IIS

<rewrite> 
    <rules> 
     <rule name="Redirect to Subdomains" stopProcessing="true"> 
      <match url="^xyzPage.aspx$" /> 
      <conditions> 
       <add input="{QUERY_STRING}" pattern="^barvalue=(.+)$" /> 
      </conditions> 
      <action type="Redirect" url="http://{C:1}.{HTTP_HOST}" appendQueryString="false" /> 
     </rule> 
    </rules> 
</rewrite> 

它檢查URL(之前或之後沒有)恰好xyzPage.aspx匹配。
它檢查查詢字符串是否包含參數barvalue(僅此參數),以及參數值是否爲空。
如果這兩個條件都沒問題,它會觸發Redirecthttp://barvalue.original.host

您的問題指定Rewrite,所以如果這確實是您想要做的,請將動作type="Redirect"更改爲type="Rewrite"

重要:您可能需要Application Request Routing module安裝和啓用Rewrite不同的域的代理模式設置。

+0

我已更新我的問題。請立即查看更新後的問題。 – 2013-03-11 11:33:47

+0

@MayankPathak當你說「沒有真正在服務器上創建子域名」時,你希望用戶看到什麼?服務器應該如何知道要渲染的內容? – cheesemacfly 2013-03-11 14:53:33

+0

@nicolas ..我想要的是,將有一個頁面和產品將由'查詢字符串'在頁面上有所不同。並基於查詢字符串我想做子域名...我只是想重寫URL作爲子域.. – 2013-03-12 05:52:38