我正在重新编写一个使用许多不同的非微软技术编写的旧网站。新网站是asp.net网络表单。
我在数据库中有一个OLD url列表,并且有一个例程,它将检查所请求的页面url与数据库中的url列表,并执行相应的301重定向到内容NEW url。
我的问题是,从效率的角度来看,如果请求的Url基本上是404 /未找到,我该如何才能执行此OLD URL查找。我不想在每个页面请求(通过global.asax中的Application_BeginRequest)中触发“Check-Old-Urls-And-Redirect-If-Found”例程,因为在大多数情况下,请求的页面将是一个有效的新.net页面,不需要301重定向。因此,我希望能够解决我的例程,如果它本质上是要抛出404错误。
我检查旧网站Url的Db的例程是缓存的,所以至少它不会每次都访问数据库,但我只是想阻止它甚至调用这个例程(偶尔会在缓存时命中数据库)已经过期了,但没有必要。
我想也许我可以从global.asax中的Application_Error例程中执行旧的url查找,检查404状态的错误代码,在那种情况下,执行旧的url查找,但是在测试时,它没有'似乎在global.asax中的Application_Error例程中遇到我的断点 - 而是浏览器显示IIS 7 404 Not Found错误。
浏览器必须收到对新网址的301响应,并且不会收到错误的404响应代码(除非请求的网址既不是新的或旧的风格网址)。
有人能推荐一种有效的方法来处理这种情况吗?
答案 0 :(得分:0)
IMO要做的最好的事情是安装IIS Rewrite Module并为所有旧网址创建重定向。你可以在单独的XML文件中拥有301重定向,这是一个更清晰的方法,这是关于此的SO帖子:
IIS7 urlrewrite module - Rules in external xml file
更新:您只需输入一个网址列表,如下所示:
<rule name="Redirect map bluesunhotels">
<match url=".*"/>
<conditions>
<add input="{bluesunhotels:{REQUEST_URI}}" pattern="(.+)"/>
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false"/>
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="bluesunhotels">
<add key="/index.php?show=2326" value="/resort-afrodita.aspx"/>
<add key="/index.php?show=2271" value="/starigrad-paklenica.aspx"/>
</rewriteMap>
</rewriteMaps>