0

我需要一种编写无扩展名网址的方法。我的服务器是 IIS6.0 版本 1 的共享主机。目前我正在使用 UrlRewriting.Net dll,它仅支持 IIS7。

我的原始网址是 abc.xyz.in/Index.aspx?c=comp_Name; 我的虚拟网址是 abc.xyz.in/comp_Name.aspx 但我希望它为 abc.xyz.in/comp_Name

是否可以通过任何其他模块或任何东西。请注意我的主机是共享主机。所以我既不能自己配置 IIS,也不能强迫我的管理员对其进行修改。

4

3 回答 3

1

IIS6(和旧版本)中自定义路由的问题在于它们默认情况下不会调用 ASP.Net 模块,除非您请求 .aspx、.ashx、.asmx 文件。有一些解决方案使用自定义错误来检查您尝试访问的内容,然后显示正确的页面,但这不是一个很好的解决方案(但如果您真的想了解更多关于它的信息,这里有一个示例在 CodeProject: http: //www.codeproject.com/Articles/44475/IIS-vs-ASP-NET-URL-Rewriting)。

我的建议是要求您的网络主机为 ASP.Net 添加一个通配符映射,以便它处理所有传入您网站的请求,这样您就可以编写一个适当的路由模块,他们可能不必这样做,但询问并没有什么坏处可以很容易地基于站点进行设置。如果这是不可能的,那么您可能应该寻找一个可以满足您网站需求的新虚拟主机,而不是让您的网站适应您当前的虚拟主机。

于 2012-05-28T18:56:52.217 回答
0

您好,您需要编写自己的 HttpModule。这是一个很好的例子(来自这里):看看那个网站,它会描述所有需要的步骤。

using System;
using System.Web;


public class DavModule : IHttpModule {

    private HttpApplication context = null;

    public void Dispose() {
        context.BeginRequest -= new EventHandler(context_BeginRequest);
    }

    public void Init(HttpApplication context) {
        this.context = context;
        this.context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e) {
        HttpApplication app = (HttpApplication) sender;
        app.Response.ContentType = "text/plain";

        if (app.Request.Path.EndsWith("Help"))
            app.Server.Transfer("Help.aspx");
        else {
            app.Response.Write("Path: " + app.Request.Path);
            app.Response.End();
        }
    }
}
于 2012-05-28T18:34:35.433 回答
0

如果您刚开始(或者如果这样做是一种选择),那么问题就变成了您(您的主机)是否在 IIS(6 或 7)上安装了 ASP.Net 4。

无扩展名 url 是ASP.Net 4的一部分- 这意味着您的ASP.Net站点(您希望无扩展名 url 工作)必须在 ASP.net 4(不是 v2.x)上运行...

嗯...

于 2012-05-28T21:11:43.743 回答