2012-03-21 63 views
1

我有一个功能完善的URL重写来删除文件扩展名。但是当我使用response.redirect时,URL重写不会发生。奇怪的是,这只有在URL使用完整路径而不是相对时才会发生。例如:使用URL重写规则和SSL证书的跨域response.redirect

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> 

我需要使用的完整路径,因为我从一个域到另一个。有任何想法吗?

+0

卫生署,对不起,这是Server.Transfer的 – 2012-03-21 20:34:03

+0

啊肯定,是的,我试过之一,没有工作。 – greener 2012-03-21 20:38:06

+0

作为最后一项建议,请尝试添加查询字符串,例如'response.redirect(“http://example.com/page/?test=1”)' – 2012-03-21 20:41:09

回答

0

你也许可以尝试这样的事情:

在redirect.asp的
/redirect?url=<%=Server.URLEncode("http://example.com/page.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 
%> 
+0

虽然问题在我的问题中没有正确布置,但您已经到达那里了。谢谢。 – greener 2012-03-30 20:55:07

+0

你介意阐述吗?我很高兴能够提供帮助,但我确信其他人可能想知道解决方案是什么。 – 2012-03-30 22:55:39

+0

当然。我不认为这会产生任何效果,但是被重定向到的域名具有SSL证书。所以还有一个其他的重写规则。问题最终通过重定向到“https:// example.com/page”解决。 – greener 2012-03-31 16:33:04