Удаление расширения HTML или ASPX
В размещенной среде IIS7 я ищу простейший способ использования имен файлов без расширения. Просто у меня есть следующие страницы:
index.html(или .aspx) → domain.com
gallery.html → domain.com/gallery
videos.html → domain.com/videos
и т.д...
У меня есть только несколько страниц, у меня нет динамического кода, ничего особенного. Все примеры, которые я нашел, или методы, которые я использую на других сайтах, которые я разработал, вращаются вокруг динамического контента, страниц и т.д. Я просто ищу простейшее решение, в идеале не требующее какого-либо модуля перезаписи URL. Предпочтительно я мог сохранить расширение .html вместо преобразования сайта в проект ASP.NET, но это вариант.
Спасибо.
Ответы
Ответ 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");
}
}