2013-12-17 239 views
1

我盡我所能來掃描幫助論壇上作出的web.config做這樣的URL的重寫IIS URL重寫ASP

domain.com/default.asp?id=3&language=2 

我的希望是,這可能是

domain.com/en/service

其中language=2是「恩」 和id=3是頁「服務」(這個名字在MySQL存在)

我只能找到例子做反之亦然......

像這樣

<rewrite> 
    <rules> 
    <rule name="enquiry" stopProcessing="true"> 
     <match url="^enquiry$" /> 
     <action type="Rewrite" url="/page.asp" /> 
    </rule> 
    </rules> 
</rewrite> 

我想它是這樣的......我知道這是不正確的,但也許解釋了我的問題。

<rewrite> 
    <rules> 
    <rule name="enquiry" stopProcessing="true"> 
    <match url="^default.asp?id=3&language=2$" /> 
    <action type="Rewrite" url="/en/serice" /> 
    </rule> 
    </rules> 
</rewrite> 

回答

1

我一直在使用自定義錯誤頁在傳統的ASP做到了這一點,這似乎是最好的方式,除非你使用某種類型的服務器上安裝的第三方組件。

爲此,在IIS(或web.config)中,需要設置404錯誤以轉到特定的自定義錯誤經典ASP頁面(例如404.asp)。

在此自定義錯誤頁面中,您首先需要檢查URL是否有效。如果是的話,你可以Server.Transfer到正確的頁面,返回200響應代碼,並解析URL以將URL轉換爲數據庫查找所需的值等。如果它不是有效的URL,那麼你顯示一個自定義錯誤頁面並返回404響應代碼。

根據您的URL結構,檢查有效URL和檢索URL參數的代碼會有很大差異。但是要在自定義404錯誤頁面上查找請求的URL,您必須查看查詢字符串,它將類似於「404; http://domain.com:80/en/service/」。

下面是一些示例代碼,從所請求URL中獲取的參數:

Dim strUrl, intPos, strPath, strRoutes 
strUrl = Request.ServerVariables("QUERY_STRING") 
If Left(strUrl, 4) = "404;" Then 
    intPos = InStr(strUrl, "://") 
    strPath = Mid(strUrl, InStr(intPos, strUrl, "/") + 1) 
    If strPath <> "" Then 
     If Right(strPath, 1) = "/" Then strPath = Left(strPath, Len(strPath) - 1) 
    End If 
    strRoutes = Split(strPath, "/") 

    'Here you can check what parameters were passed in the url 
    'eg. strRoutes(0) will be "en", and strRoutes(1) will be "service" 

End If 

下面是如何在web.config中(而不是IIS)設置自定義錯誤頁:

<?xml version="1.0"?> 
<configuration> 
    <system.webServer> 
     <httpErrors errorMode="Custom" existingResponse="Replace"> 
      <remove statusCode="404" subStatusCode="-1" /> 
      <error statusCode="404" subStatusCode="-1" responseMode="ExecuteURL" path="/404.asp" /> 
     </httpErrors> 
    </system.webServer> 
</configuration> 
+0

如果您使用的是IIS7或更高版本,則不需要混淆自定義錯誤頁面,只需要web.config。 (或者你可以使用IIS管理器中的Rewrite模塊來引導你的規則,寫入web.config。) – John

+0

@John,我們在說這裏的經典ASP,而不是.NET嗎? – johna

+0

是的,我正在談論經典ASP。 Web.Config在IIS7或IIS8中重定向傳統ASP頁面(或者.htm頁面)。我猜你需要在你的應用程序池中啓用.net才能工作,但這些規則當然不限於.net頁面。也許我們應該改變我們的用戶名。這些評論可能看起來像某人自言自語:) – John

1

如果你想使用正則表達式,你可以做這樣的事情

<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.asp?language={R:1}&amp;id={R:2}" /> 
</rule> 

這請將「domain.com/en/service」改爲「domain.com/default.asp?language=en & id = Service」或「domain.com/2/3」as「domain.com/default.asp?language = 2 & id = 3「

要將2改爲en和3改爲服務,以及所有其他選項,儘管我認爲您需要爲每個組合排列單獨的規則,或者在您的內部有某種邏輯asp頁面來讀取您的查詢字符串變量並將相應的值發送到您的SQL查詢。還要注意友好URL中的參數以相同的順序出現並且重寫的URL中的查詢字符串變量,儘管這應該不是問題。如果有人試圖訪問具有原始「不友好」URL的頁面,他們會發現他們正在尋找什麼,無論他們輸入查詢字符串變量。

請注意,我並沒有真正的手代碼上面的規則,我在IIS管理器中的URL重寫模塊生成的 - 它使生活變得更加簡單

另外請注意,我在討論同名其他答案,這僅適用於IIS7及以上版本