2013-09-23 24 views
0

我已將我的站點的文件結構更改爲一個更低的目錄級別。基於URL的web.config文件中的重定向

因此,我希望用戶打:

http://example.com/directory/theRest/of/the/path

被重定向到:

http://example.com/theRest/of/the/path

似乎是一個很簡單的web.config文件,對不對?

我該如何解析路徑來簡單地刪除第一個目錄並保持其餘路徑不變?

我想這個web.config將存在於「/目錄」,但也許它可能會更好在根,這將匹配URL中的「/目錄」模式。

以下是我到目前爲止(這可能是錯誤的)。任何幫助是極大的讚賞!

<rule name="Redirect to main site" stopProcessing="true"> 
    <match url="^(.*)$" ignoreCase="true" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" /> 
    </conditions> 
    <action type="Redirect" url="http://example.com/ ????" /> 
</rule> 

回答

1

簡短的回答你的問題是下面的代碼片段:

<rule name="Redirect to main site" stopProcessing="true"> 
    <match url="^(directory\/)(.*)$" /> 
    <action type="Redirect" url="/{R:2}" /> 
</rule> 

我已經分居的URL路徑分爲兩個部分(由方括號括起)。這使我們能夠從URL中提取directory{R:2}指的是theRest/of/the/path,而{R:1}指的是URL路徑的第一部分 - 換句話說就是directory/

+0

謝謝您的詳細回覆!它是有道理的,應該有效,但並不像預期的那樣。我似乎有3個問題:1)只有當網址設置爲「^。* $」之類的情況下才會匹配2)似乎{R:x}值始終爲空3)它不適用於子文件夾 – neoikon

+0

別客氣!請回答我兩個問題。 1)您使用的是哪個IIS版本? 2)你如何測試你的規則? –

+0

1)運行IIS 7 2)我編輯web.config,然後點擊各種URL。全部都是404,因爲目錄不在那裏,這就是這條規則開始的原因。另外,如果動作是「重寫」或「重定向」,並且嵌套應該是 ...等,那麼正確嗎? – neoikon