2011-11-01 59 views
1

本地運行以下IIS URL重寫設置並不能得到它(從web.config中)工作:無法獲取靜態重定向到與IIS URL重寫工作2.0

 <rewrite> 
     <rewriteMaps> 
      <rewriteMap name="StaticRedirects"> 
       <add key="^tvb/" value="/tv/" /> 
      </rewriteMap> 
     </rewriteMaps> 
     <rules> 
      <rule name="StaticRedirectsRule" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions> 
        <add input="{StaticRedirects: {REQUEST_URI}}" matchType="Pattern" pattern="(.+)" ignoreCase="true" negate="false" /> 
       </conditions> 
       <action type="Redirect" url="{C:1}" appendQueryString="true" /> 
      </rule> 
     </rules> 
    </rewrite> 

試圖打開url http://localhost/tvb/http://localhost/tvb/?a=b會返回404錯誤,而不是將我重定向到http://localhost/tv(帶或不帶查詢字符串)。

我在這裏找到類似的帖子在stackoverflow上,我已經嘗試了他們推薦的內容:回收應用程序池,重新啓動IIS服務,用URL和/或REQUEST_FILENAME替換REQUEST_URI,但這些更改都沒有改變。

任何人都可以看到我錯了哪裏?

回答

5

好吧,我設法找到了這個自己的解決方案,所以這裏就是我所做的:

首先,它似乎RewriteMap指令不支持正則表達式,所以這不起作用:

<add key="^tvb/" value="/tv/" /> 

相反,它必須是這樣的:

<add key="/tvb/" value="/tv/" /> 

此外,似乎IIS7 REQUEST_URI變量已經改變行爲,因爲URL重寫2.0模塊(和文檔)被釋放。

此前,REQUEST_URI只包含url的路徑,沒有域和查詢字符串。

現在,顯然REQUEST_URI在IIS7的工作方式類似於一個在Apache中,也就是說,它包含查詢字符串一樣,所以難怪這部分不工作:

<add input="{StaticRedirects: {REQUEST_URI}}" ... /> 

,而不是我不得不將其更改爲這個:

<add input="{StaticRedirects: {SCRIPT_NAME}}" ... /> 

現在重定向工作,無論是有和沒有查詢字符串!

希望這可以幫助別人。

剛在服務器上發現這個錯誤:IIS Rewrite, rewrite maps and query strings

0

我有同樣的問題,並用PATH_INFO替換REQUEST_URI修復了問題。

這裏是鏈接https://forums.iis.net/post/1883056.aspx

推理: 「這是因爲REQUEST_URI包含整個請求的URL包含查詢字符串。由於重寫映射中的鍵不包含查詢字符串,因此映射查找失敗。