2013-03-15 62 views
2

我使用IIS URL重寫模塊通過重寫映射和友好URL掩蓋了我的內部URL,並且重寫規則(不重定向)。這是我的重寫地圖:用重要標籤重寫爲URL

<rewriteMap name="HashTest"> 
    <add key="/nohash" value="/nohash.aspx" /> 
    <add key="/hash1" value="/hashtest.aspx#hash1" /> 
</rewriteMap> 

,這是我重寫規則:

<rule name="Rewrite rule1 for HashTest"> 
     <match url=".*" /> 
     <conditions> 
      <add input="{HashTest:{REQUEST_URI}}" pattern="(.+)" /> 
     </conditions> 
     <action type="Rewrite" url="{C:1}" /> 
</rule> 

這是工作的網址,沒有井號標籤,所以我每次查詢www.mysite.com/nohash它顯示我的內容從www.mysite.com/nohash.aspx與我們更改瀏覽器的URL。

現在,當我嘗試重寫包含一個主題標籤,我收到了404錯誤的URL,例如www.mysite.com/hash1應該只是告訴我從/hashtest.aspx#hash1但我只是內容得到一個404.

現在,如果我將我的規則動作類型更改爲重定向它確實成功重定向,所以我不知道爲什麼它不能與重寫工作。

我知道哈希標籤不會發送到服務器的請求,但它是有意義的,如果我的重寫映射是向後的,如<add key="/hashtest.aspx#hash1" value="/hash1" />

任何有關爲什麼重定向與hastags一起工作,但重寫不是?我沒有結婚IIS重定向,如果你有另一個模塊或方法,我可以使用它非常受歡迎

回答

6

散列符號(官方稱爲片段標識符)後面的部分是客戶端只有一部分的URL。它永遠不會發送到服務器。這就是爲什麼它不能用於重寫,但僅用於重定向。重寫規則將匹配,但IIS實際上會嘗試打開一個名爲hashtest.aspx#hash1的文件(即擴展名爲.asp#hash1的文件)。此文件不會作爲普通的ASP頁面處理,因爲該擴展未鏈接到ASP.NET。並且很可能它的內容甚至不會顯示,因爲IIS默認配置爲僅允許請求已知擴展。