Подтвердить что ты не робот

Удаление расширения HTML или ASPX

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

index.html(или .aspx) → domain.com gallery.html → domain.com/gallery videos.html → domain.com/videos и т.д...

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

Спасибо.

4b9b3361

Ответ 1

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

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

и

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

или в основном следующий код в моем файле web.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>

Ответ 2

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

Поместите следующие строки кода в ваш файл 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

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

Ответ 4

Если у вас динамический код, мне кажется, что проще всего переименовать файлы с .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

Ответ 5

У меня недостаточно очков для комментариев, и это улучшает ответ Pawan M. Его работа будет работать, если на странице не используются строки запроса. Я изменил код 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

Ответ 6

Вы можете сделать это в С#, чтобы использовать настроенное расширение в своем 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");
        }
 }