或者相反,如果 URL 不存在,我如何才能重写它?例如,拦截 404s。
上下文如下:我们正在慢慢地将我们的站点从 ASP 经典迁移到 ASP.NET。慢慢地,我的意思是将 9000 多个 .asp 页面一次一页转换为 .aspx。
在这样做的同时,我们希望防止任何断开的链接,并避免丢失搜索引擎中的任何排名。这意味着我们所有的 .asp URL 必须继续存在,即使它们将由 .aspx 页面提供服务。
我想要做的是拥有将重写 .asp -> .aspx 的 ISAPI 重写规则,除非目标 URL 实际上不存在,在这种情况下它只会执行并返回 .asp。
因此,如果我们还没有将 somepage.asp 转换为 .aspx,则 URL 不会被重写,并且会显示 somepage.asp。一旦 somepage.asp 消失,URL 将被重写为 somepage.aspx,它会被执行并返回,但 Web 浏览器/搜索引擎会认为它收到了 somepage.asp。
在未来的某个时候,我们会在 .aspx 页面中设置规范的 url,让搜索引擎在方便时赶上。
注意:我已经尝试在 IIS 上使用自定义 404 来检查文件系统并在目标 .aspx 页面存在时执行 Server.Transfer,但是您无法从 asp classic 传输到 asp.net。(您会得到“指定的 'Page Language="c#" ' 选项未知或无效。错误 '8000d001'" )唯一可行的方法是我们执行 301/302 重定向而不是 Server.Transfer,那就是在这个时候对我们来说是不可取的。(管理层是偏执狂,说不是一种选择。)