2013-01-16 69 views
0

我試圖創建一個規則會從URL中的子文件夾,將其轉換成例如查詢字符串值:URL重寫規則 - 子查詢字符串值

如果我瀏覽到這個網址: http://www.example.com/myfolder 我想那讀http://www.example.com/default.aspx?folder=myfolder

這是我到:

<rule name="Rewrite Language"> 
    <match url="([a-z]{2})(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="/default.aspx?code={R:2}" /> 
</rule> 

但這並不返回完整的子文件夾值。我會誠實地說我從這個網站的類似問題偷了這個,我必須承認,我真的不知道這一切意味着什麼!

我可能會以錯誤的方式處理這個問題,我的問題是我無法確定子文件夾是什麼,因爲它是從隨機的6個字符的字母數字值動態生成的。

任何幫助將非常感激。

大衛

回答

2

IIS管理器中提供了創建我通常會發現更快,更容易比手動輸入規則到web.config文件的規則GUI /嚮導界面。值得檢查:IIS Manager -> select your site/application -> URL Rewrite -> Add Rule(s)

我想下面的規則將做的伎倆爲您提供:

<rule name="RewriteUserFriendlyURL1" stopProcessing="true"> 
    <match url="^([^/]+)/?$" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="default.aspx?folder={R:1}" /> 
</rule> 

基本上,「匹配URL」是一個regular expression,用於識別URL的一部分。在這種情況下,它捕獲一個包含一個或多個字符的組(在/中除外),並在URL的末尾添加一個可選的/。然後,它會將網址重寫爲default.aspx?folder=,後跟匹配的值({R:1}指的是第一個捕獲的組,其中包含文件夾名稱)。

如果您只有一個子文件夾名稱(不是嵌套文件夾),這將工作。

您還可以添加其相反的方向工作的第二個規則,所以瀏覽到http://www.example.com/default.aspx?folder=myfolder將導致用戶看到http://www.example.com/myfolder

<rule name="RedirectUserFriendlyURL1" stopProcessing="true"> 
    <match url="^default\.aspx$" /> 
    <conditions> 
     <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> 
     <add input="{QUERY_STRING}" pattern="^folder=([^=&amp;]+)$" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}" appendQueryString="false" /> 
</rule> 
+0

感謝您的代碼。我將這添加到標記之間的web.config中,並且出現404錯誤。另外,當試圖通過IIS管理器訪問URL ReWrite GUI時,它會生成一個錯誤:執行此操作時發生錯誤。詳細信息:文件名:\\?\ c:\ inetpub \ wwwroot \ lnk.qa \ web.config。錯誤: –

+0

我必須添加我在導航到http://www.example.co.uk/myfolder時遇到了404錯誤 –

+0

對不起,延遲迴到您身邊......也許您已將它添加到您的web.config文件中在錯誤的水平?我的例子應該坐在下面的嵌套: