2010-12-19 17 views
29

W hostowanym środowisku IIS7 szukam najprostszego sposobu używania nazw plików bez rozszerzeń. Po prostu mam następujące strony:Usuwanie rozszerzenia HTML lub ASPX

index.html (lub .aspx) -> domain.com gallery.html -> domain.com/gallery videos.html -> domain.com/videos etc ...

Mam tylko garstkę stron, nie mam kodu dynamicznego, nic specjalnego. Wszystkie znalezione przeze mnie przykłady lub metody, których używam w innych witrynach, które opracowałem, obracają się wokół dynamicznych treści, stron itp. Po prostu szukam najprostszego rozwiązania, najlepiej nie wymagającego zainstalowania jakiegokolwiek modułu do przepisywania URL-ów. Najlepiej, gdyby zamiast konwersji strony do projektu ASP.NET mogłem zachować rozszerzenie .html, ale jest to opcja.

Dzięki.

+0

Patrz tej odpowiedzi to działa dobrze [Usuń .aspx tworzą wszystkie strony] [1] [1]: http: //stackoverflow.com/a/15240694/1265997 – cwishva

+0

proszę odwiedzić ten link http://stackoverflow.com/questions/2170745/what-are-pros-to-use-extension-less-url –

Odpowiedz

45

skończyło się stosując następujące strony:

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

i

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

lub zasadniczo następujący kod w moim pliku web.config przy użyciu IIS7 Moduł Przebudowy URL, który oferuje większość witryn hostowanych (w tym przypadku używam g 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> 
+12

Dzięki za to doskonałe rozwiązanie. Aby wyjaśnić, powyższy kod XML znajduje się w elemencie pliku web.config. –

+0

Właśnie uratowałem swoje życie +1 –

1

Jeśli masz kod dynamiczny, myślę, że najłatwiej jest zmienić nazwy plików z .aspx na .html, szczególnie jeśli masz tylko kilka stron. Nie ma prostego sposobu, aby to zrobić bez przepisywania adresu URL.

Jednak z IIS 7 można go bardzo łatwo skonfigurować za pomocą modułu HTTP. Scott Guthrie wyjaśnia to bardzo dobrze. W tym poście pokazuje kilka podejść do dostosowywania adresów URL. Myślę, że chciałbyś podchodzić do # 3 najlepiej.

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

+0

Dzięki, ale pomysł jest całkowicie pozbyć się rozszerzeń. Nie zmieniaj ich nazwy z HTML> ASPX i na odwrót. Post ScottGu jest trochę nieaktualny, ale ma przydatność, ale jest bardziej złożony, niż szukam informacji. – roadsunknown

+0

Informacje zawarte w tym łączu informują o sposobie usunięcia rozszerzenia, jeśli spojrzysz na podejście 3. Instrukcje opisują proces _current_ w celu usunięcia rozszerzeń z IIS7, mimo że został napisany w 2007 roku. – dontangg

5

Innym Najprostszym rozwiązaniem dla osiągnięcia tego samego:

Put następujących linii kodu do pliku 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"); 
    } 
} 
+0

pawa Mam dodany kod ur, ale wciąż widzę nazwę strony z rozszerzeniem w url, –

+0

Powinien działać, użyłem tego w kilku moich projektach. Sprawdź ponownie, czy czegoś jeszcze brakuje. –

+0

Ten kod nie robi tego, co powiedziałeś. –

0

nie mam wystarczająco dużo punktów, aby komentarz, a to poprawia odpowiedź Pawana M. Jego działanie będzie działać, chyba że na stronie są używane łańcuchy zapytań. Zmodyfikowałem kod Pawana, aby umożliwić ciągi zapytań, nie mówiąc już o mojej wersji vb.

Sprawdź, czy Twój projekt zawiera plik Global.asax.vb. Jeśli nie Dodawanie elementu wykonując to:

Plik -> Nowy -> Plik -> Application globalnej klasy

W pliku Global.asax swojego projektu dodać tę funkcję:

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 
+0

Dzięki Artjom B., odpowiedź odzwierciedla teraz Twoją sugestię. - Dzięki – sec0ndHand

3

Innym nieco bardziej nowoczesnym sposobem na to jest użycie Microsoft.AspNet.FriendlyUrls. W pliku Global.asax.cs dodać:

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

aw RouteConfig złożyć

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

Można to zrobić w C# używać własnego rozszerzenie w adresie URL w ASP.NET.

Niech ".recon" w kodzie będzie niestandardowym rozszerzeniem. (Tj zastąpić ".recon" do własnego numeru wewnętrznego)

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"); 
     } 
} 
Powiązane problemy