2013-09-05 64 views
0

我試圖讓IIS URL重寫模塊強制執行我的URL上的尾隨正向斜槓,以便將請求mysite.com/blamysite.com/bla/IIS URL重寫強制執行尾隨正向斜槓404不工作404

我正在使用如下所示的規則,這是IIS URL重寫嚮導爲這種情況設置的一種方法,一切正常,但只有當文件存在時才適用。只要我們遇到404情況,就會在請求的末尾附加一個正斜槓。

<rule name="Add trailing slash" stopProcessing="true"> 
    <match url="(.*[^/])$" /> 
    <conditions> 
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Redirect" redirectType="Permanent" url="{R:1}/" /> 
</rule> 

使用上述規則時,會發生以下情況:

  • www.mysite.com/bla - 重定向到www.mysite.com/bla/(我想 正是)
  • www.mysite.com/bla/ - 住的是(我想 正是)
  • www.mysite.com/bla/myimg.jpg - 保持原樣提供myimg.jpg存在
  • www.mysite.com/bla/myimg.jpg - 重定向如果myimg.jpg不存在
  • 到www.mysite.com/bla/myimg.jpg/

首先,任何想法,爲什麼發生這種情況,我怎麼能阻止它?如果一個資源404s我只是想要它404,那麼簡單。另外,如果一個目錄的請求是在沒有結尾正斜槓的情況下完成的,我只是想要追加它。

其次,爲什麼我們有兩個規則說如果它不是一個文件如果它不是一個目錄?當然,我們應該說如果它不是一個文件,如果它是一個目錄(或者我誤解了某些東西?)。

任何幫助表示讚賞。

+0

爲了增加這裏的混淆,IIS有一個名爲「Courtesy Redirects」的地方,它會自動爲文件夾添加一個尾部斜線,如下所示:https://support.microsoft.com/zh-cn/help/298408/iis-generated-courtesy-redirect-when-folder-without-trailing-slash-is-requested - 所以我懷疑在你的前三種情況下,這個規則不會觸發,你只是看到IIS的默認行爲。 。 –

回答

0

首先,任何想法爲什麼會發生這種情況,以及如何防止它?

這是因爲在條件下,它說,如果請求的路徑是現有文件或文件夾,該規則不會被觸發:

<conditions> 
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
</conditions> 

所以,當你請求一個不存在的文件時,規則觸發器。

如果一個資源404s我只是想讓它404,那麼簡單。

重寫模塊首先嚐試重定向您的路徑,因爲它不考慮您的請求來請求文件或文件夾,因此它會嘗試到達路由。路線不存在,所以你最終得到一個404。

其次,爲什麼我們有規則說明它是不是一個文件,如果它不是一個目錄和 ?

因爲如果你要求www.mysite.com/bla/myimg.jpg,你可能想顯示bla/myimg.jpg,而不是把bla/myimg.jpg的路線。目錄也一樣。