删除HTML或ASPX扩展

时间:2010-12-19 04:44:21

标签: asp.net html iis-7 url-rewriting

在托管的IIS7环境中,我正在寻找使用无扩展名文件名的最简单方法。我只有以下几页:

index.html(或.aspx) - > domain.com gallery.html - > domain.com/gallery videos.html - > domain.com/videos 等...

我只有一些页面,我没有动态代码,没什么特别的。我发现的所有示例或我在其他网站中使用的方法都围绕着动态内容,页面等。我只是在寻找最简单的解决方案,理想情况下不需要安装任何类型的url重写模块。最好是,我可以保留.html扩展名,而不是将站点转换为ASP.NET项目,但这是一个选项。

感谢。

7 个答案:

答案 0 :(得分:47)

我最终使用了以下网站:

http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx

http://forums.iis.net/t/1162450.aspx

或者我的web.config文件中的以下代码使用大多数托管网站现在提供的IIS7 URL重写模块(在这种情况下我使用的是GoDaddy):

<system.webServer>
    <rewrite>
        <rules>
            <rule name="RewriteASPX">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="{R:1}.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

答案 1 :(得分:7)

另一种更现代的方法是使用Microsoft.AspNet.FriendlyUrls。在Global.asax.cs中添加:

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    RouteConfig.RegisterRoutes(RouteTable.Routes);

并在RouteConfig文件中

public static class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings);
    }

答案 2 :(得分:6)

实现相同目标的另一个最简单的解决方案:

将以下代码行放入global.ascx文件中:

void Application_BeginRequest(object sender, EventArgs e)
{
   String fullOrigionalpath = Request.Url.ToString();
   String[] sElements = fullOrigionalpath.Split('/');
   String[] sFilePath = sElements[sElements.Length - 1].Split('.');

   if (!fullOrigionalpath.Contains(".aspx") && sFilePath.Length == 1)
   {
       if (!string.IsNullOrEmpty(sFilePath[0].Trim()))
           Context.RewritePath(sFilePath[0] + ".aspx");
   }
}

答案 3 :(得分:1)

如果您有动态代码,我认为最简单的方法是将文件从.aspx重命名为.html,尤其是如果您只有少量页面。如果不以某种方式重写URL,就没有简单的方法。

但是,使用IIS 7,您可以使用HTTP模块轻松设置它。 Scott Guthrie非常好地解释了这一点。在这篇文章中,他展示了几种自定义URL的方法。我认为你最好接近#3。

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

答案 4 :(得分:0)

我没有足够的评论意见,这正在改善Pawan M的答案。除非你在页面上使用了Query Strings,否则他的工作会有效。我修改了Pawan的代码以允许查询字符串,更不用说我的是vb版本。

检查以确保您的项目中包含Global.asax.vb文件。如果它没有通过这样做添加一个项目:

档案 - &gt;新 - &gt;档案 - &gt;全球申请类

在项目的Global.asax文件中添加此功能:

Sub Application_BeginRequest(sender As Object, e As EventArgs)
    Dim fullOrigionalpath As [String] = Request.Url.ToString()
    Dim sElements As [String]() = fullOrigionalpath.Split("/"c)
    Dim sFilePath As [String]() = sElements(sElements.Length - 1).Split("."c)
    Dim queryString As [String]() = sElements(sElements.Length - 1).Split("?"c)

    If Not fullOrigionalpath.Contains(".aspx") AndAlso sFilePath.Length = 1 Then
        If Not String.IsNullOrEmpty(sFilePath(0).Trim()) Then
            If queryString.Length = 1 Then
                Context.RewritePath(sFilePath(0) + ".aspx")
            Else
                Context.RewritePath(queryString(0) + ".aspx?" + queryString(1))
            End If

        End If
    End If
End Sub

答案 5 :(得分:0)

您可以在c#中执行此操作,以在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");
        }
 }

答案 6 :(得分:0)

在特定页面的asp WebForm中删除.aspx扩展名的简便解决方案:

1-检查解决方案资源管理器>>转到Global.asax文件>>检查方法Application_BeginRequest在此方法中编写此代码

//代码在这里

    // Remove aspx Extension From Smy Page
    string CurrentPath = Request.Path; // getting Current Url
    if(CurrentPath == "/YourPageURL")
     
        HttpContext MyContext = HttpContext.Current;
        MyContext.RewritePath("/YourPageURL.aspx");

// enter code here希望这对您来说很好。 // Ghazi Hur mahar.ghazi@gmail.com