Frage

Ich habe gesehen, eine Menge Diskussion über URL-Routing und VIELE tolle Anregungen...aber in der realen Welt, eine Sache habe ich nicht gesehen werden diskutiert:

  1. Erstellen-Freundliche URLs mit Leerzeichen und illegale Zeichen
  2. Abfragen der DB

Sagen Sie, Sie erstellen eine Medizinische Website, Artikel mit einem Kategorie und optional Unterkategorie.(1 bis viele).( Könnte verwendet habe, jedem Beispiel, aber der medizinische Bereich hat viele lange Wörter)


Beispiel Categories/Sub/Artikel Struktur:

  1. Ihre Allgemeine Gesundheit (Kategorie)
    • - Natürliche Gesundheit (Unterkategorie)
      1. Das Immunsystem Ihres Körpers und warum braucht es Hilfe. (Artikel)
      2. Sind Pflanzen und Kräuter wirklich die Lösung?
      3. Sollte ich Essen, angereicherte Lebensmittel?
    • Homöopathische Medizin
      1. Was ist Homöopathische Medizin?
    • Gesunde Ernährung
      1. Trinken, sollten Sie 10 Tassen Kaffee pro Tag?
      2. Sind Bio-Gemüse lohnt sich das?
      3. Ist Burger King® böse?
      4. Ist "French café" oder amerikanischen Kaffee gesünder?
  2. Krankheiten & Bedingungen (Kategorie)
    • Auto-Immun-Erkrankungen (Unterkategorie)
      1. Die #1 killer von Menschen ist eine Krankheit
      2. Wie Sie Hilfe bekommen
    • Genetische Bedingungen
      1. Verhindert Spina Bifida schon vor der Schwangerschaft.
      2. Sind Sie anfällig für eine lange Zeit Leben?
  3. Dr.FooBar ' s persönliche Empfehlungen (Kategorie)
    1. Meine Gedanken auf Herbal medicine & natural remedies (Artikel - keine Unterkategorie)
    2. Warum sollten Sie sich sorgen über Ihre Gesundheit?
    3. Es IST möglich, richtig zu Essen und eine gute Ernährung.
    4. Hat unblutige Operation kommen des Alters?

In einer Struktur wie dieser, sind Sie gehen zu müssen einige LAAANGE URLs wenn Sie gehen:/{Category}/{subcategory}/{Article Title}

Darüber hinaus gibt es zahlreiche unzulässige Zeichen, wie # !?'é" etc.

ALSO, die FRAGE(N):

  1. Wie würden Sie behandeln die illegalen Zeichen und Leerzeichen?(Vor-und Nachteile?)
  2. Würden Sie Griff immer diese aus der Datenbank
    • In anderen Worten, würden Sie Vertrauen in die DB zu finden das Element, vorbei an den Titel oder ziehen Sie alle Titel und finden Sie die key-in-code zu erhalten, den Schlüssel zu übergeben, um die Datenbank (zwei Aufrufe an die Datenbank)?

Hinweis:Ich sehe immer schöne hübsche Beispiele wie /Produkte/Getränke/Short-Product-Name/ wie über den Umgang hässliche Beispiele ^_^

War es hilfreich?

Lösung

Ich selbst bevorzuge _ - für aus Gründen der Lesbarkeit ( setzen Sie einen Unterstrich und der _'s praktisch go_away ) , wenn Sie gehen zu strip-Räume.

Möchten Sie vielleicht, um zu versuchen, casting erweiterte Zeichen, ie, ü , zu schließen-ascii-equivelants, wo möglich, dh:

ü -> u

Jedoch in meiner Erfahrung das größte problem mit Tatsächliche SEO-bezogenen Probleme, ist nicht, dass die URL enthält all die schönen text, sein, dass, wenn die Menschen ändern der text in die Verknüpfung ein, alle Ihre SEO-Arbeit dreht sich um Mist, weil Sie jetzt haben DEADLINKS in die Indizes.

Für diese würde ich raten, was stackoverflow tun, und einen numerischen Teil, welcher sich auf eine Konstante Einheit, und völlig ignorieren, der rest des Textes ( und/oder aktualisieren, wenn seine falsch )

Auch die grob hericichial Natur macht einfach nur für schlechte Nutzbarkeit durch den Menschen.Menschen hassen lange urls.Kopieren und einfügen Sie saugt und Sie sind einfach anfälliger für das brechen sind.Wenn Sie können, unterteilen Sie es in die untere teirs, ie

/article/1/Some_Article_Title_Here
/article/1/Section/5/Section_Title_Here
/section/19023/Section_Title_here  ( == above link ) 

Dass übrigens die einzige Zeit, die Sie brauchen, um zu tun, voodoo-Magie ist, wenn das gezählte Artikel ist eigentlich hat gelöscht wurden, auf die Zeit, die Sie verwenden, den text als eine Zeichenkette zu versuchen finden Sie die wahre Artikel oder etwas ähnliches.

Andere Tipps

Mein letzter Ansatz ist:

  1. Wandeln Sie alle "fremden Buchstaben" auf "normalen Buchstaben" -> a zu a, ñ bis n, usw.
  2. .
  3. Wandeln Sie alle Nicht-Wort-Zeichen _ (das heißt nicht a-zA-Z0-9)
  4. ersetzen Gruppen von Unterstrichen mit einem einzigen Strich
  5. Entfernen Sie alle Tailing und führenden Unterstrichen

Wie für die Lagerung, glaube ich, die freundliche URL in die Datenbank gehen sollte, und unveränderlich sein, nachdem alle

Lösung 2 ist der typische Ansatz von denen ... einige Verfeinerungen sind möglich, zB. Apostrophe in nichts statt einem Bindestrich, zur besseren Lesbarkeit drehen. Typischerweise werden Sie Version des Titels in der Datenbank die munged-for-URL-Gültigkeit gespeichert werden soll, sowie die ‚echten‘ Titel, so können Sie das Element wählen Sie eine indexierte SELECT WHERE.

Allerdings. Es gibt kein tatsächliches unzulässiges Zeichen in einem URL-Pfad Teil, solange Sie es entsprechend codieren. Beispielsweise ein Raum, hash oder slash kann als%, 20% oder 23% 2F codiert werden. Auf diese Weise ist es möglich, zu kodieren jeder string in eine URL Teil, so können Sie es aus der Datenbank von aktuellen, unveränderten Titel SELECT zurück.

Es gibt ein paar möglichen Probleme mit dieser obwohl auf Ihrem Web-Framework abhängig. Zum Beispiel alles auf Basis von CGI nicht in der Lage sein werden, den Unterschied zwischen einem codierten% 2F und einem real / und einigen Frameworks / Implementierungen zu sagen, kann mit Unicode-Zeichen Schwierigkeiten hat.

Alternativ kann eine einfache und sichere Lösung ist es, den Primärschlüssel in der URL enthält, die den Titel Teile rein für die Herstellung der Adresse schöneren verwenden. zB:.

http://www.example.com/x/category-name/subcat-name/article-name/348254863

Dies ist, wie zB. Amazon tut es. Es hat den Vorteil, dass Sie den Titel in der Datenbank ändern können und die URL mit dem alten Titel umleiten automatisch auf den neuen.

Falls jemand interessiert ist. Dies ist der Weg (oooh ... punny) Ich nehme:

Route r = new Route("{country}/{lang}/Article/{id}/{title}/", new NFRouteHandler("OneArticle"));
Route r2 = new Route("{country}/{lang}/Section/{id}-{subid}/{title}/", new NFRouteHandler("ArticlesInSubcategory"));
Route r3 = new Route("{country}/{lang}/Section/{id}/{title}/", new NFRouteHandler("ArticlesByCategory"));

Das bietet mir die Möglichkeit, URLs zu tun, etwa so:

  • site.com/ca/en/Article/123/my-life-and-health
  • site.com/ca/en/Section/12-3/Health-Issues
  • site.com/ca/en/Section/12 /

Wenn URLs Reinigung, hier ist eine Methode, die ich akzentuierte Zeichen ersetzen bin mit:

private static string anglicized(this string urlpart) {
        string before = "àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇ’ñ";
        string  after = "aAaAaAaAeEeEeEeEiIiIiIoOoOoOuUuUuUcC'n";

        string cleaned = urlpart;

        for (int i = 0; i < avantConversion.Length; i++ ) {

            cleaned = Regex.Replace(urlpart, before[i].ToString(), after[i].ToString());
        }

        return cleaned;

        // Here's some for Spanish : ÁÉÍÑÓÚÜ¡¿áéíñóúü"

}

Sie wissen nicht, ob es die effizienteste Regex ist, aber es ist sicherlich wirksam. Es ist eine Erweiterung Methode, so dass es rufen Sie einfach die Methode in einer statischen Klasse setzen und tun somthing wie folgt aus:

string articleTitle = "My Article about café and the letters àâäá";
string cleaned = articleTitle.anglicized();

// replace spaces with dashes
cleaned = Regex.Replace( cleaned, "[^A-Za-z0-9- ]", "");

// strip all illegal characters like punctuation
cleaned = Regex.Replace( cleaned, " +", "-").ToLower();

// returns "my-article-about-cafe-and-the-letters-aaaa"

Natürlich kann man es in einem Verfahren namens „CleanUrl“ oder etwas, aber das ist bis zu Ihnen kombinieren könnte.

Als Follow-up. Ich habe einige Ideen. So fühlen sich frei auf den Ideen zu kommentieren oder geben Sie Ihre eigene Antwort auf die Frage:

Lösung 1: Ersetzen Sie alle ungültigen Zeichen mit Bindestrichen:

  • www.mysite.com/diseases --- Bedingungen / Auto-Immun-Erkrankungen / der - 1-Killer-of-Personen-is-some-Krankheit /

Das sieht ein wenig hässlich zu mir ...

Lösung 2: Strip ungültige Zeichen und ersetzen Räume mit einzelnen Strichen:

  • www.mysite.com/diseases-conditions/Auto-immune-disorders/the-1-killer-of-people-is-some-disease /

Lösung # 3, ein paar Regeln gelten für bestimmte Zeichen mit Worten ersetzen:

  • www.mysite.com/diseases-and-conditions/Auto-immune-disorders/the-number1-killer-of-people-is-some-disease /

Lösung # 4 Streifen Alle Räume und Verwendung Kapitalisierung

  • www.mysite.com/DiseasesAndConditions/AutoImmuneDisorders/TheNumber1KillerOfPeopleIsSomeDisease /

(Mai nicht gut auf Groß- und Kleinschreibung Servern arbeitet und ist schwer zu lesen)

Lösung 2 würde meine Empfehlung sein. Ich bin nicht der größte SEO-Experte Welten, aber ich glaube, es ist so ziemlich die ‚Standard‘ Art und Weise ohnehin gute Platzierungen zu erhalten.

Was ich tue, ist normalerweise nur rechtlichen Charakter und halten Sie die freundliche URL so kurz wie möglich zu ermöglichen. Wichtig ist auch, dass freundliche URLs oft durch menschliche eingeführt werden, habe ich nie eine freundliche URL aus dem Titel oder Inhalt, erzeugen und dann, dass man verwenden, um die Datenbank abzufragen. Ich würde eine Spalte in einer Tabelle verwenden, z.B. friendly_url, so dass die Website Admin kann URLs einfügen.

Ich löste dieses Problem, indem eine zusätzliche Spalte in der Datenbank hinzugefügt (zum Beispiel: UrlTitle neben dem Spalte Titel) und Speicher einen Titel mit allen ungültigen Zeichen beraubt ‚&‘ Symbole ersetzt mit ‚und‘ und Leerzeichen durch Unterstriche ersetzt. Dann können Sie über die UrlTitle Nachschlag und die realen in den Seitentiteln verwenden oder wo auch immer.

Ich schlage vor, zu tun, was Wordpress hat - kleine Worte Streifen aus und ungültige Zeichen mit Bindestrichen (max 1 Bindestrich) REPLCE dann lassen die Benutzer die URL korrigieren, wenn sie wollen. Es ist besser für SEO die URL konfigurierbar zu machen.

Als Client-Benutzer, nicht ein Web-Designer, finde ich Firefox manchmal die URL bricht, wenn er versucht, „illegal“ Zeichen mit nutzbaren zu ersetzen. Beispielsweise ersetzt FF ~ mit% 7E. Das nie lädt für mich. Ich kann nicht verstehen, warum die HTML-Editoren und Browser einfach nicht einverstanden sind nicht die Zeichen A-Z und 0-9 zu akzeptieren. Wenn bestimmte Skripte% benötigen,?, Und solche, die Scripting-Anwendungen ändern, damit sie mit alphanumerischer arbeiten.

scroll top