我正在将现有的经典ASP网站转换为(VB)MVC,我不希望任何现有的URL中断。我已经阅读了很多关于如何进行正确的301重定向的帖子(比如这个:Routing Classic ASP Requests To .NET - SEO Redirects)。随着最新的MVC发布,我收集了
Response.RedirectPermanent(objRedirect.new_url, True)
就是所需要的一切。
我已在数据库表中输入了所有旧网址,其中包含新网址的相应列。我在自定义404页面中添加了代码以获取原始网址:
Dim strURL As String = Request.RawUrl.Substring(Request.RawUrl.IndexOf("aspxerrorpath=") + 15).ToLower()
所以我可以在数据库中查找。 (有趣的旁注,MSDN的文档 - Redirect Mode - 似乎说如果我在web.config的CustomErrors部分设置RedirectMode = ResponseRewrite,我就不用担心上面做的了,但是当我'我试过这个,我得到IIS错误,说它不会提供ASP页面?!?!?)
我遇到的问题是,我的旧的经典ASP URL与新的MVC路由具有相同的目录,不知何故被部分路由。例如,“/ test/default.asp”在我错误页面的上述strURL变量中显示为“/ test / test”。
我确实有“测试”的路线设置:
routes.MapRoute("Test", _
"test/{action}", _
New With {.controller = "test", .action = "index"})
在Global.aspx.vb中,但我也尝试了所有可以想到的方法来忽略路由中的所有ASP页面(似乎无济于事)。以下是我的尝试(我确实看到一个旧的 - 2008年 - Phil Haack的帖子说我只能拥有其中一个“全部捕获”忽略路线,但不知道这是否仍然有效或不):
routes.IgnoreRoute("{file}.asp")
routes.Ignore("{resource}.asp/{*pathInfo}")
routes.IgnoreRoute("{resource}.asp/{*pathInfo}")
routes.Add(New Route("{resource}.asp/{*pathInfo}", New StopRoutingHandler()))
并且它们中没有一个似乎有任何区别(我明显地尝试了所有这一个)。
这不仅仅与一条路线隔离 - 它出现在旧网站上存在的与新网站上的命名路线匹配的任何目录上。
提前感谢您提出的所有建议!
更新:以下是我发现的另外两个“问题”:
我的另一条路线如下:
routes.MapRoute(“IndependentSales”,_ “independentntsales / {action}”,_ 新的{.controller =“independentntsales”,。。action =“index”})
当我请求“/resale/default.asp”时,它会转到“转售/独立销售”。那是什么???
答案 0 :(得分:0)
您是否尝试过使用web.config?
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Remove index.php" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
上面的示例用于重写CodeIgniter应用程序,以省略URL中的index.php文件。考虑到条件部分,你可以用它做很多事情。在这种情况下,如果它不是文件而不是目录,我只会进行重写。
答案 1 :(得分:0)
好的,经过几个小时的阅读/研究/调试后,我得出的结论是我没有做错任何事,并且在Visual Studio,.NET,MVC中有一些“错误”......一些东西!我是对的!我从头开始创建了一个新项目,在那里复制了我的所有代码,一切正常!
(好吧,我不确定“它应该”是正确的,但我确实让我的代码按照我想要的方式运行。对ASP页面的请求仍然打击了MvcApplication_BeginRequest - 我不认为它们应该与我的IgnoreRoute条目???? - 但至少扩展程序仍然在那里,所以我可以在我的数据库中查找ASP页面并进行重定向!)
所以,这对我来说可能是独一无二的,但也许我可以节省其他时间的挫折......如果你认为你有一切正确,也许你这样做!创建一个新项目并试试!
......成为一名程序员真是太糟糕了! ;-D
(Musings ......我没有加入到我的新项目中的3件事是:
我可以尝试从原始项目中减去它们,看看它是怎么回事。鉴于ELMAH的流行以及编写路线的人,我无法想象他们会有问题,但谁知道......?)