我们已经重新设计结构的一个网站,其中有几个业务单位。现在我想要重新定向(301)向新的网页。

即:
是www.example.com/abc
现在www.example.com/default.aspx?article=abc

我已经尝试使用全球性的。asax要做到这一点,它工作正常,当我试过它。

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

所以 http://localhost:1234/example/abc 重定向正确,但(在1234是口的调试服务器)
http://localhost/example/abc 不重新定向,它给了我一个404.

任何想法?


额外信息:如果我去 http://localhost/example/abc/default.aspx 然后它重定向正确。

有帮助吗?

解决方案

好吧,如果港口的指示你正在使用建立在网络服务器(一个附带VS),这可能是因为这工作 总是 路线的请求通过ASP.NET 框架。

请求结束/abc将不会自动路线,通过ASP.NET 框架,因为IIS可能不知道你希望他们。你需要检查你的IIS设置,以确保这样的请求被传送到aspnet_isapi.dll


编辑: 为了完成这个,你需要添加一个 通配符的映射:

  1. 在IIS管理,扩展的地方计算机,扩大网站的文件夹,右击网站或虚拟目录,然后点击的性质。
  2. 点击相应的标签:主目录、虚拟目录中,或者目录。
  3. 在应用程序设置区域击配置,然后点击的映射卡。
  4. 安装一个通配符的应用程序的地图,做到以下几点:
    • 上映射卡,击中添加或插入。
    • 类型的路径DLL在可执行的文字框中,或浏览中找到它的(例如,ASP.NET 2.0dll c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll 在我的机器)
    • 为扩展,使用"。*" 没有报价,当然
    • 选择哪个词你想看的(获得、头部、后,调试是通常的ASP.NET你决定)
    • 确定"文字的发动机"或"应用引擎的"选择
    • 取消"检查文件是否存在"
    • 点击没关系。

我可能是关于这一点,但是,如果我希望有人将纠正我。:)

其他提示

你应该使用IIS通配符重定向,你需要这样的东西;

 *; www.example.com/*; www.example.com/default.aspx?article=<*>

Microsoft

如果您正在使用Apache,我认为您需要修改htaccess文件。

您目前是否在Visual Studio Web服务器中测试该网站?这通常在“localhost:nnnnn”上运行该站点。其中“nnnnn”是一个端口号(如上所述是1234),它没有设置为没有一个端口号。

如果您已在相关计算机上安装了IIS,请将项目发布到该计算机,并且您应该能够在没有“nnnnn”的情况下验证它是否正常工作。因为你的代码中没有任何东西会导致它不这样做。

您是否确定每个网站的web.config文件相同(假设:1234与:80不同)

另外,你试过localhost:80?

您的 http:// localhost / example / abc 未按预期调用Global.asax。通常, http:// localhost 正在端口80(:80)上运行。如果要在端口80上运行站点,则需要在IIS中部署站点以在此处运行。

您需要在IIS中设置Handler映射,以将所有未知扩展转发到asp.net。第一个是有效的,因为cassini处理所有请求,第二个不起作用,因为IIS正在查找该目录,并且它不存在,而不是运行您拥有的代码的.net框架。

以下是有关如何在asp.net中重写网址

如果可能的话,我建议使用新的申请请求路由或< a href =“http://www.urlrewriting.net/149/en/home.html”rel =“nofollow noreferrer”> UrlRewrite.net

IIS默认情况下不会将所有请求移交给ASP.NET进行处理。只有一些资源扩展,其中包括“aspx”和“aspx”。将被传递给asp.net进行处理。当您请求 http:// localhost / example / abc 时,IIS会尝试查找目录以查看如果你有一个默认文件(即default.aspx,index.html)从该目录加载。因为它无法找到带有垃圾“abc”的目录。在其中标记,它永远不会找到要加载的default.aspx文件。

当您尝试加载 http://localhost/example/abc/default.aspx ,IIS看到“aspx”扩展并立即将其交给ASP.NET运行时进行处理。 http:// localhost / example / abc 请求未加载的原因是它永远不会被提交到ASP.NET,所以global.asax当然永远不会看到它。

Cassini托管站点处理所有请求,因此该调用确实由ASP.NET和global.asax文件处理。

我同意Darren Kopp的观点,他建议您在IIS中设置Handler映射,以便将未知扩展转发给ASP.NET。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top