我怎么能重新定向及修改扩展-小Url通过ASP.NET?
-
02-07-2019 - |
题
我们已经重新设计结构的一个网站,其中有几个业务单位。现在我想要重新定向(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
编辑: 为了完成这个,你需要添加一个 通配符的映射:
- 在IIS管理,扩展的地方计算机,扩大网站的文件夹,右击网站或虚拟目录,然后点击的性质。
- 点击相应的标签:主目录、虚拟目录中,或者目录。
- 在应用程序设置区域击配置,然后点击的映射卡。
- 安装一个通配符的应用程序的地图,做到以下几点:
- 上映射卡,击中添加或插入。
- 类型的路径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=<*>
如果您正在使用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。