.NET网站如何隐藏其文件的.aspx扩展名?

时间:2008-10-21 22:22:55

标签: asp.net

我很确定stackoverflow.com是用ASP.NET创建的,但无论我在哪里点击,我都看不到地址栏中的.aspx扩展名。 它是如何完成的,有什么特别的原因吗?

9 个答案:

答案 0 :(得分:25)

对于stackoverflow,它们使用ASP.NET MVC而不是ASP.NET Web表单。对于Web表单,url指向磁盘上的文件,而MVC指向控制器操作。如果您使用的是webforms,则需要使用URL重写。 Scott Guthrie在进行URL重写方面有good article

答案 1 :(得分:16)

此站点使用ASP.NET MVC框架和Urls映射来路由而非物理页面。路径将传递给控制器​​,然后控制器决定如何显示页面。

答案 2 :(得分:9)

最有可能是通过网址重写完成的......

网络服务器正在使用与浏览器地址栏中的网址相同的网址。将它们重新映射到幕后的ASPX页面

这可以在.NET HTTP模块中完成,也可以在IIS中作为ISAPI处理程序完成

Scott Gutherie在他的网站上发表了一篇关于URL重写的好文章

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

答案 3 :(得分:6)

您可以通过修改web.config文件来实现。

<configuration>
<system.webserver>
<rewrite>
   <rules>
            <rule name="RemoveASPX" enabled="true" stopProcessing="true">
                <match url="(.*)\.aspx" />
                <action type="Redirect" url="{R:1}" />
            </rule>
            <rule name="AddASPX" enabled="true">
                <match url=".*" negate="false" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
                </conditions>
                <action type="Rewrite" url="{R:0}.aspx" />
            </rule>
   </rules>
</rewrite>
</system.webserver>
</configuration>

答案 4 :(得分:4)

正如其他人已经回答的那样,StackOverflow是使用ASP.NET MVC构建的,ASP.NET MVC使用System.Web.Routing。但是,System.Web.Routing不是ASP.NET MVC的一部分,它是带有SP1的RTMd,并且意味着可以在没有ASP.NET MVC的情况下使用它。您可以在此处查看如何将其与WebForms一起使用:http://haacked.com/archive/2008/03/11/using-routing-with-webforms.aspx和此处:http://www.codeplex.com/ASPNET35Routing

答案 5 :(得分:3)

您可以使用ISAPI重写(对于IIS)执行此操作以及更多操作。它允许您创建友好的URL而不需要所有丑陋的查询字符串。它为用户提供了更友好的界面,可以让您的内容更易于搜索。

如果您使用的是Apache,请使用mod_rewrite。

两者的基本前提是它们采用友好的URL(就像您在此站点中看到的那样),然后使用一系列规则(通常是您指定的正则表达式)将其转换为内部URL或查询字符串。代码很容易理解。

例如,他们会使用转换规则将posts/edit/<postnumber>转换为editPost.aspx?postNumber=<postnumber>

答案 6 :(得分:0)

只要页面.aspx,.ashx位于应用程序文件夹中,下面的代码就可以正常工作。优先级首先解析.aspx页面,然后解决.ashx。

例如,如果您尝试localhost / AppFolder / Time,它将尝试解析localhost / AppFolder / Time.aspx,如果没有找到,则为localhost / AppFolder / Time.ashx。

P.S。

  1. 我没有对此代码进行全面测试,所以要小心。

  2. 它不考虑可能包含.aspx文件的文件夹,因此,如果您尝试访问/ PhysicalApplicationPath / MYFOLDER /页面,它将无法解析为/PhysicalApplicationPath/MYFOLDER/page.aspx.

  3. 代码:

    {{1}}

答案 7 :(得分:0)

您可以在c#.NET中执行此操作,以在ASP.NET中的URL中使用自定义扩展。

让代码中的“.recon”成为您的自定义扩展程序。 (即将“.recon”替换为您自己的扩展名)

 protected void Application_BeginRequest(object sender, EventArgs e)
 {
    HttpApplication app = sender as HttpApplication;
    if (app.Request.Path.ToLower().IndexOf(".recon") > 0)
    {
        string rawpath = app.Request.Path;
        string path = rawpath.Substring(0, rawpath.IndexOf(".recon"));
        app.Context.RewritePath(path+".aspx");
    }
 }

答案 8 :(得分:-3)

并且原因是:

  • 您可以更改技术(比如说PHP),而不会破坏索引或加入书签的网址
  • 您的网址更加“REST”,并且与资源相对应,而不仅仅是文件
  • 您可以更轻松地记住网址或通过电话向某人阅读