Frage

Bei einigen .NET angetrieben Websites URLs mit asp.net Seitennamen nicht, wie default.aspx enden, sondern sie verwenden ein Muster http://sitename.com oder http://sitename.com/subdirectory/subdirectory. Die Website wird als Unterverzeichnisse von der Wurzel abgebildet, dh. / Tags, / Benutzer / Abzeichen, würden die URLs sein / Tags / Benutzer / Abzeichen sind.

Stack-Überlauf, das ein spezielles Beispiel zu verwenden, verwendet Frage URLs der Form Wie bekommt saubere URLs wie Stackoverflow? . Welches ist ideal, um die Seite für Suchmaschinen zu optimieren.

Ist das HTTP-Handler implementiert? Filtriert die GET-Anfrage basierend auf dem Weg und die ganze Antwort wird in dem Handler selbst auf der Grundlage der Frage id gebildet? Sonst noch jemand darauf zu spekulieren?

War es hilfreich?

Lösung

Es ist ASP.Net MVC, die das .NET-Routing mehr oder weniger hat eingebaut. Das Routing für nicht MVC-Projekte zur Verfügung als auch, obwohl

http://msdn.microsoft.com/en-us/library/ cc668201.aspx

Es ist nur ein DLL Sie in Ihrem Ordner ist fallen können. Grundsätzlich verwendet es reguläre Ausdrücke Ihre URLs auf Seiten / Vorlagen entsprechen.

Andere Tipps

Dies wird erreicht mit mod_rewrite in Apache oder ähnlichen Methoden url_rewriting auf IIS .

. Hinweis: SOFlow verwendet das letztere

Die URLs sind in diesem Format folgenden REST Prinzipien , in dem alles ist eine Ressource mit einem eindeutige URL.

Ich glaube, ich irgendwo im Blog gelesen, dass dies durch die Verwendung erreicht ASP.NET MVC-Framework .

Ich weiß, dass Stack-Überlauf des ASP.NET MVC-Framework verwendet, die vermutlich eine URL Einbau-Überschreibungssystem hat. Für Nicht-Windows-System ist Apache mod_rewrite sehr verbreitet.

Zum Beispiel kann eine Wiki-Seite: http://server.com/wiki/Main_Page Anfrage wird vom Webserver behandelt. Es übersetzt in /wiki/index.php?page=Main_Page

Hier ist ein Beispiel von URL in Apache Umschreiben:

RewriteEngine on
RewriteRule ^forum-([0-9]+)\.html$ forumdisplay.php?fid=$1 [L,QSA]
RewriteRule ^forum-([0-9]+)-page-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2 [L,QSA]

RewriteRule ^thread-([0-9]+)\.html$ showthread.php?tid=$1 [L,QSA]
RewriteRule ^thread-([0-9]+)-page-([0-9]+)\.html$ showthread.php?tid=$1&page=$2 [L,QSA]

Was dies sagt, ist, wenn die URL, die in kommt, ist forum-##.html dann Prozess, fordern, als ob es forumdisplay.php?fid=## waren. Das gleiche gilt für die thread-##.html Regeln.

Sie können es in ASP.net tun, indem Sie mit Context.RewritePath .

Global.asax , erstellen Sie eine Application.BeginRequest Ereignishandler.

Zum Beispiel, wenn Sie wollen Anfragen machen

example.com/questions

Rückkehr tatsächlich die Ergebnisse von

example.com/Questions/Default.aspx

Global.asax :

<%@ Application Language="C#" %>
<script runat="server">

   void Application_BeginRequest(Object sender, EventArgs e)
   {
       string originalPath = HttpContext.Current.Request.Path.ToLower();

       if (originalPath.Contains("/questions"))
       {
           String newPath = originalPath.Replace("/questions", "/Questions/Questions.aspx");
           Context.RewritePath(newPath);
       }
    }
</script>

Wenn Sie Ihre Web-Site ist alles läuft, bevor .NET Framework 4, werden Sie manuell auf dem runAllManagedModulesForAllRequests drehen müssen in web.config , da sonst die Beginrequest Veranstaltung wird nicht gefeuert werden:

<configuration>
...
   <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
   </system.webServer>
</configuration>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top