Междоменный response.redirect с правилами перезаписи URL и сертификатом SSL - PullRequest
1 голос
/ 22 марта 2012

У меня отлично работает перезапись URL для удаления расширения файла. Но когда я использую response.redirect, перезапись URL не происходит. Как ни странно, это происходит только тогда, когда URL использует полный путь, а не относительный. Например:

response.redirect("http://example.com/page")

дает мне http://example.com/page.asp

, тогда как response.redirect("/page") в порядке.

Код перезаписи URL:

<rule name="rewrite asp">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAll">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_FILENAME}" negate="true" pattern="(.*).asp" />
  </conditions>
  <action type="Rewrite" url="{R:1}.asp" />
</rule>

Мне нужно использовать полный путь, потому что я перехожу из одного домена в другой. Есть идеи?

1 Ответ

0 голосов
/ 30 марта 2012

Вы можете попробовать что-то вроде этого:

/redirect?url=<%=Server.URLEncode("http://example.com/page.asp")%>

затем в redirect.asp:

<%sSomeExternalURL = URLDecode(Request.QueryString("url"))%>
<html>
<head>
  <meta http-equiv="refresh" content="0;url=<%=sSomeExternalURL%>">
</head>
<body>
</body>
</html>

<%
Function URLDecode(str) 
    str = Replace(str, "+", " ") 
    For i = 1 To Len(str) 
        sT = Mid(str, i, 1) 
        If sT = "%" Then 
            If i+2 < Len(str) Then 
                sR = sR & _ 
                    Chr(CLng("&H" & Mid(str, i+1, 2))) 
                i = i+2 
            End If 
        Else 
            sR = sR & sT 
        End If 
    Next 
    URLDecode = sR 
End Function
%>
...