首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当存在重写的目标URL时,如何使用ISAPI-Rewrite重写URL?

仅当存在重写的目标URL时,如何使用ISAPI-Rewrite重写URL?
EN

Stack Overflow用户
提问于 2011-01-15 01:00:09
回答 2查看 1.1K关注 0票数 0

或者相反,如果URL不存在,我如何重写它?例如,拦截404s。

这里是背景:我们正在慢慢地将我们的网站从ASP经典迁移到ASP.NET,我所说的缓慢,我指的是一次一个页面地将9000+ .asp页面转换为.aspx。

在这样做的同时,我们希望防止任何断开的链接,以及避免在搜索引擎中失去任何排名。这意味着我们所有的.asp URL都必须继续存在,即使它们将由.aspx页面提供服务。

我希望能够做的是有ISAPI重写规则,将重写.asp -> .aspx,除非目标网址并不实际存在,在这种情况下,它将只是执行和返回的.asp。

因此,如果我们还没有将somepage.asp转换成.aspx,URL就不会被重写,而会显示somepage.asp。一旦somepage.asp消失,网址将被重写为somepage.aspx,该URL将被执行并返回,但是web浏览器/搜索引擎会认为它接收到了somepage.asp。

在将来的某个时候,我们会在.aspx页面中设置canonical url,让搜索引擎在方便的时候赶上。

注意:我已经尝试过在IIS上使用自定义的404来检查文件系统,并在目标.aspx页面存在的情况下执行Server.Transfer,但是您不能从asp classic转换到asp.net。(你得到“指定的‘页面Language="c#”’选项未知或无效。错误'8000d001'“)唯一可行的方法是我们做一个301/302重定向,而不是Server.Transfer,这对我们来说是不可取的。(管理层是偏执的,他们说不是一个选择。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-17 23:14:39

我想通了。正如Chris Haas所建议的,如果我将404处理程序设置为.aspx页面,那么当目标页面存在时,我就能够执行Server.Transfer,如果目标页面不存在,则失败并返回常规的404状态。所以就像这样:

代码语言:javascript
复制
<%@ Page Language="c#" %>

<%@ Import Namespace="System.IO" %>
<script RunAt="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        String requestedUrl = Request.ServerVariables["HTTP_X_REWRITE_URL"];

        if (requestedUrl.EndsWith(".asp", StringComparison.CurrentCultureIgnoreCase)) {
            String targetUrl = requestedUrl + "x";
            String targetPath = Server.MapPath(targetUrl);

            if (File.Exists(targetPath)) {
                Server.Transfer(targetUrl);
            }
        }
        Response.Status = "404 Not Found";
    }

</script>

我仍然需要使用查询字符串来测试它,但到目前为止,它可以很好地处理每种情况。当时机成熟,管理层同意时,我们将简单地停止Server.Transfer,并将其更改为永久移动的301。由于IIS能够为每个目录设置错误页,我们甚至可以在执行此操作时进行某种程度的选择。

顺便说一句,看起来ISAPI_Rewrite 3可能有一个文件检查选项,这个选项也可以工作,但我们的服务器上只有v2。

票数 0
EN

Stack Overflow用户

发布于 2011-01-15 02:55:59

就个人而言,如果内容正在移动,您可能希望编写一个执行301重定向的流程,以指示页面已移动到新位置。事实的确如此。

这将确保新内容得到适当的索引和链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4693709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档