Удалить расширение HTML или ASPX - PullRequest
34 голосов
/ 19 декабря 2010

В размещенной среде IIS7 я ищу самый простой способ использования имен файлов без расширений.Просто у меня есть следующие страницы:

index.html (или .aspx) -> domain.com gallery.html -> domain.com/gallery videos.html -> domain.com/videos и т. Д....

У меня всего несколько страниц, у меня нет динамического кода, ничего особенного.Все примеры, которые я нашел, или методы, которые я использую на других сайтах, которые я разработал, вращаются вокруг динамического контента, страниц и т. Д. Я просто ищу простейшее решение, в идеале не требующее установки какого-либо модуля перезаписи URL.Желательно, чтобы я мог сохранить расширение .html вместо преобразования сайта в проект ASP.NET, но это вариант.

Спасибо.

Ответы [ 6 ]

47 голосов
/ 29 декабря 2010

Я использовал следующие сайты:

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

и

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

или, в основном, следующий код в моей сетиФайл .config, использующий модуль перезаписи URL-адреса IIS7, предлагаемый большинством размещенных сайтов (в данном случае я использую 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>
8 голосов
/ 07 сентября 2015

Еще один более современный способ сделать это - использовать 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);
    }
6 голосов
/ 28 апреля 2011

Еще одно простое решение для достижения того же:

Добавьте следующие строки кода в ваш файл 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");
   }
}
1 голос
/ 19 декабря 2010

Если у вас есть динамический код, я думаю, что проще всего просто переименовать файлы из .aspx в .html, особенно если у вас всего несколько страниц.Нет простого способа сделать это без переписывания URL-адреса.

Однако, с IIS 7, вы можете действительно легко настроить его с помощью модуля HTTP.Скотт Гатри объясняет это очень хорошо.В этом посте он показывает несколько подходов к настройке URL-адресов.Я думаю, что вы хотели бы, чтобы подход №3 был лучшим.

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

0 голосов
/ 07 сентября 2017

Вы можете сделать это в c #, чтобы использовать настраиваемое расширение в вашем URL в ASP.NET.

Пусть ".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");
        }
 }
0 голосов
/ 08 апреля 2015

У меня недостаточно очков, чтобы комментировать, и это улучшает ответ Павана М.Он будет работать, если на странице не используются строки запросов.Я изменил код Pawan для разрешения строк запроса, не говоря уже о моей версии vb.

Убедитесь, что в вашем проекте есть файл Global.asax.vb.Если он не добавляет элемент, выполнив это:

Файл -> Создать -> Файл -> Класс глобального приложения

В файле 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
...