Ulf93: Eigenen einfachen Permalink erstellen?

Hallo liebe Community! Das googeln habe ich leider aufgegeben, da ich einfach keine Anleitung/Tutorial zu meiner Frage finde, bzw. immer nur Anleitungen wie man die Permalinks in Wordpress/Googleblog usw einstellt.

Nun habe ich aber eine eigene Seite geschrieben, in der Benutzer Anzeigen erstellen können. Man klickt also auf einen Link "www.example.de/anzeige.php?id=20" und kommt dann auf die entsprechende Anzeige. Die Anzeige enthält dabei immer einen Betreff, den die Benutzer eingeben "müssen" -diesen würde ich gerne als Permalink verwenden.

Ich weiß nur überhaupt nicht wie ich das angehen muss. Meine Idee war bisher:

  1. Bei der Anzeigenerstellung den Betreff "abgeändert" (also leerzeichen zu bindestrichen usw.) in mysql mit der anzeige zusammen unter einer neuen spalte "permalink" abspeichern.
  2. Bei der Linkerstellung, aus mysql den "permalink" nehmen und den Link so bauen: "www.example.de/das-ist-eine-anzeige"
  3. ??? Ab hier weiß ich schon nicht mehr weiter Ich habe bereits einen sitemap-generator gebaut, weiß also wie man Dateien "erstellt". Muss ich jetzt für jede Anzeige eine eigene html-Datei erstellen? Oder woher weiß jetzt meine Seite was bei "www.example.de/das-ist-eine-anzeige" zu tun ist?

Habe auch was mit mod-rewrite gelesen, aber was bringt es mir denn "www.example.de/das-ist-eine-anzeige" umzuschreiben? Würde nur Sinn ergeben, wenn der Link weiterhin auf "www.example.de/anzeige.php?id=20" führt, aber wenn man bzw. bei Wordpress mit der Maus über einen Artikellink fährt, sieht man ja auch gleich den "richtig ausgeschriebenen" Link.

Würde mich riesig über Hilfe/Aufklärung freuen, oder vllt kennt ja auch jemand eine gute Anleitung, wo das alles schön (für Anfänger) beschrieben wird :) Vielen Dank im Vorraus! LG Ulf93

akzeptierte Antworten

  1. Moin!

    Nun habe ich aber eine eigene Seite geschrieben, in der Benutzer Anzeigen erstellen können.

    Man klickt also auf einen Link "www.example.de/anzeige.php?id=20" und kommt dann auf die entsprechende Anzeige.

    Die Anzeige enthält dabei immer einen Betreff, den die Benutzer eingeben "müssen" -diesen würde ich gerne als Permalink verwenden.

    Du hast ein konzeptionelles Problem.

    1. Der Permalink ist einer, unter dem die Webseite dauerhaft - also auch nach einer Archivierung oder einer Verschiebung aus anderen Gründen erreichbar ist.

    Beispiel:

    Aktelle Adresse:

    • http://example.com/aktuelles/foo_ist_nicht_bar.php

    Adresse im Archiv:

    • http://example.com/archiv/2015/5/foo_ist_nicht_bar.php

    Permalink:

    • www.example.com/nachrichten.php?id=20

    Oder:

    Adresse nach falscher Kategorisierung durch den Kunde:

    • http://example.com/shop/Elektronik/toller_staubsauger.html

    Adresse nach administrativem Verschieben in die richtige oder bessere Kategorie:

    • http://example.com/shop/Haushalt/toller_staubsauger.html

    Permalink:

    • www.example.com/Produkte/0815

    Überlege also genau, ob der "Permalink" überhaupt einen Sinn hat und ob Du diesen nicht nur des "Permalinks" (der "Mode", des "Buzzwortes") wegen haben willst.

    2. Der Permalink muss auch eindeutig sein. Wie soll das gehen, wenn einzig der Benutzer über den Betreff, nach Deiner Beschreibung also über die URL bestimmt. Was Du zu Deinen Bemühungen zusätzlich brauchst ist also eine Möglichkeit, eindeutige URLS zu erzeugen, wenn der Betreff zweimal gleich ist.

    Oft wird dann eine Nummer (folgend: "ID") angehangen:

    • http://example.com/shop/Haushalt/toller_staubsauger-1.html
    • http://example.com/shop/Haushalt/toller_staubsauger-2.html
    • http://example.com/shop/Haushalt/toller_staubsauger-1234.html

    Manchmal auch gleich die ID:

    • http://example.com/shop/Haushalt/toller_staubsauger-815.html

    Der Trick ist, dass anhand von Techniken wie mod_rewite alles auf ein Skript umgeleitet wird und entweder vom Skript oder schon von mod_rewrite hierbei die ID mittels eine regulären Ausdrucks ermittelt wird. Die Inhalte werden dann aus der Datenbank erzeugt.

    Defakto ist es dann so, dass es beim Erzeugen der Seite selbst (zum Zeitpunkt des Abrufes) völlig egal ist, ob

    1. http://example.com/shop/Haushalt/toller_staubsauger-815.html
    2. http://example.com/shop/foo-815.html
    3. http://example.com/shop/815.html

    aufgerufen wurde. Die "überflüssigen" Informationen werden nämlich schlicht verworfen und aus solche aus der Datenbank ersetzt: Man macht ("intern" - also ohne Weiterleitung) mit mod_rewirte (oder einer ähnlichen Technik) daraus etwas wie:

    http://example.com/shop.php?item=815

    Was übrig bleibt ist demnach genau der "Permalink", so dass dann gar nichts zu tun wäre - außer den "Permalink" für Suchmaschinen anzubieten. Freilich kann man auch aus der ID die "neue" URL bauen (in dem man sich die Daten (hier:Kategorie, Produktname) aus der Datenbank holt und dann den Benutzer zur gewünschten URL schickt - das belastet aber nur den Server und bringt sonst "gar nichts".

    ToDo:

    Denke jetzt nochmals über das Konzept nach.

    Jörg Reinholz

    1. Moin!

      Nun habe ich aber eine eigene Seite geschrieben, in der Benutzer Anzeigen erstellen können.

      Man klickt also auf einen Link "www.example.de/anzeige.php?id=20" und kommt dann auf die entsprechende Anzeige.

      Die Anzeige enthält dabei immer einen Betreff, den die Benutzer eingeben "müssen" -diesen würde ich gerne als Permalink verwenden.

      Du hast ein konzeptionelles Problem.

      1. Der Permalink ist einer, unter dem die Webseite dauerhaft - also auch nach einer Archivierung oder einer Verschiebung aus anderen Gründen erreichbar ist.

      Beispiel:

      Aktelle Adresse:

      • http://example.com/aktuelles/foo_ist_nicht_bar.php

      Adresse im Archiv:

      • http://example.com/archiv/2015/5/foo_ist_nicht_bar.php

      Permalink:

      • www.example.com/nachrichten.php?id=20

      Oder:

      Adresse nach falscher Kategorisierung durch den Kunde:

      • http://example.com/shop/Elektronik/toller_staubsauger.html

      Adresse nach administrativem Verschieben in die richtige oder bessere Kategorie:

      • http://example.com/shop/Haushalt/toller_staubsauger.html

      Permalink:

      • www.example.com/Produkte/0815

      Überlege also genau, ob der "Permalink" überhaupt einen Sinn hat und ob Du diesen nicht nur des "Permalinks" (der "Mode", des "Buzzwortes") wegen haben willst.

      2. Der Permalink muss auch eindeutig sein. Wie soll das gehen, wenn einzig der Benutzer über den Betreff, nach Deiner Beschreibung also über die URL bestimmt? Was Du zu Deinen Bemühungen zusätzlich brauchst ist also eine Möglichkeit, eindeutige URLS zu erzeugen: Mindestens dann, wenn der Betreff zweimal gleich angegeben wird. Was ja mit einiger Wahrscheinlichkeit eintreten wird.

      Oft wird also eine Nummer (folgend: "ID") angehangen:

      • http://example.com/shop/Haushalt/toller_staubsauger-1.html
      • http://example.com/shop/Haushalt/toller_staubsauger-2.html
      • http://example.com/shop/Haushalt/toller_staubsauger-1234.html

      Manchmal auch gleich die ID:

      • http://example.com/shop/Haushalt/toller_staubsauger-815.html

      Der Trick ist, dass anhand von Techniken wie mod_rewite alles auf ein Skript umgeleitet wird und entweder vom Skript oder schon von mod_rewrite hierbei die ID mittels eine regulären Ausdrucks ermittelt wird. Die Inhalte werden dann aus der Datenbank erzeugt.

      De facto ist es dann so, dass es beim Erzeugen der Seite selbst (zum Zeitpunkt des Abrufes) völlig egal ist, ob

      1. http://example.com/shop/Haushalt/toller_staubsauger-815.html
      2. http://example.com/shop/foo-815.html
      3. http://example.com/shop/815.html

      aufgerufen wurde. Die "überflüssigen" Informationen werden nämlich schlicht verworfen und durch solche aus der Datenbank ersetzt: Man macht ("intern" - also ohne Weiterleitung) mit mod_rewirte (oder einer ähnlichen Technik) daraus etwas wie:

      http://example.com/shop.php?item=815

      Was übrig bleibt ist demnach genau der "Permalink", so dass dann gar nichts zu tun wäre - außer den "Permalink" für Suchmaschinen anzubieten. Freilich kann man auch aus der ID die "neue" URL bauen (in dem man sich die Daten (hier: Kategorie, Produktname) aus der Datenbank holt (damit der Staubsauger nicht nach einer willkürlichen Angabe scheinbar in der Katergorie "Sexspielzeug" auftaucht und von Dildos "umgeben" ist) und dann den Benutzer zur gewünschten URL schickt - das belastet aber nur den Server und bringt sonst "gar nichts".

      ToDo:

      Denke jetzt nochmals über das Konzept nach.

      Jörg Reinholz

      1. Vielen Dank für deine sehr ausführliche Antwort Jörg Reinholz!

        Ich muss mich glaub auch entschuldigen, nach deiner Antwort wirkt meine Frage total falsch formuliert.

        Überlege also genau, ob der "Permalink" überhaupt einen Sinn hat und ob Du diesen nicht nur des "Permalinks" (der "Mode", des "Buzzwortes") wegen haben willst.

        -> Genau darum geht es mir! Es schaut einfach deutlich besser aus, als eine Parameter-URL. Mein Permalink steht momentan mit "www.example.de/anzeige.php?id=20" fest. Ich mag des aber lieber haben wie bzw. hier im Forum: "https://forum.selfhtml.org/self/2016/jan/9/eigenen-einfachen-permalink-erstellen" oder wie bei stackoverflow: "http://stackoverflow.com/questions/214741/what-is-a-stackoverflowerror"

        Als "URL-Text" würde ich dann gern den Betreff verwenden, den die User in der Anzeige (die sie selbst geschrieben haben) angegeben haben. Damit ein "doppelter Betreff" nicht zu Komplikationen führt, würde ich dann, wie du schon angesprochen hattest, die Anzeige-ID hinten noch anhängen wollen: "www.example.de/ein-doppelter-betreff.92815" oder besser "www.example.de/92815/ein-doppelter-betreff"

        Ich weiß eben nur nicht, wie ich dieses Vorhaben angehen soll. Wenn ich jetzt diesen Link habe: "http://example.com/shop/Elektronik/toller_staubsauger", dessen Permalink "http://example.com/shop.php?item=815" ist, wie muss man das dann mit mod_rewrite umsetzen?

        Steht darin dann eine Weiterleitung von der reinen text-url zur parameter-url? Heißt das dann, das jeweils, bei einer neu erstellten Anzeige, die htaccess-Datei um eine neue Weiterleitung ergänzt werden muss?

        Und genau das ist der Punkt, ich verstehe einfach nicht die "Logik" hinter einer URL wie "http://example.com/shop/Elektronik/toller_staubsauger". Was genau passiert da auf dem Server, welche Rädchen drehen sich dort, damit dann zwar der Permalink "http://example.com/shop.php?item=815" aufgerufen wird, ohne aber dass der User etwas davon mitbekommt, der stets nur "../toller_staubsauger" als url zu sehen bekommt?

        1. Und genau das ist der Punkt, ich verstehe einfach nicht die "Logik" hinter einer URL wie "http://example.com/shop/Elektronik/toller_staubsauger". Was genau passiert da auf dem Server, welche Rädchen drehen sich dort, damit dann zwar der Permalink "http://example.com/shop.php?item=815" aufgerufen wird, ohne aber dass der User etwas davon mitbekommt, der stets nur "../toller_staubsauger" als url zu sehen bekommt?

          Warum hängst du Dich immer wieder an der ID auf, eine solche brauchst Du gar nicht. Du musst nur dafür sorgen, dass der Benutzer seine Anzeige unter einer eindeutigen URL schaltet und da hat der Kunde selber ein Interesse daran. Was du brauchst ist eine User-ID, etwa so:

          http://example.com/offers/user_id/staubsauger.html

          D.h., praktisch publiziert der Kunde in einem ihm zugewiesenem virtuellen Pfad und nur dort. Das ist also eine einmalige Festlegung.

          Moderne HTML5 Formelemente unterstützen den Benutzer beim Finden eines neuen URL direkt im Eingabefeld und was mod_rewrite betrifft, genügt eine Regel, wo alles nach /offers/* im Request_uri auf Dein Script umgeschossen wird. Das muss dann nur noch gucken, ob es einen dem URL entsprechenden Eintrag gibt und liefert das entsprechend aus.

          1. Moin!

            Du musst nur dafür sorgen, dass der Benutzer seine Anzeige unter einer eindeutigen URL schaltet und da hat der Kunde selber ein Interesse daran.

            Es ist viel zu schwierig, von einem Kunde in einem Anzeigensystem auch nur irgendwas zu verlangen. Besser man lässt ihn tun und sorgt automatisch dafür, dass das funktioniert.

            Jörg Reinholz

            1. Moin!

              Du musst nur dafür sorgen, dass der Benutzer seine Anzeige unter einer eindeutigen URL schaltet und da hat der Kunde selber ein Interesse daran.

              Es ist viel zu schwierig, von einem Kunde in einem Anzeigensystem auch nur irgendwas zu verlangen. Besser man lässt ihn tun und sorgt automatisch dafür, dass das funktioniert.

              Wahrscheinlich. Ich frag mich sowieso, inwiefern der Begriff Perma mit Biete/Suche/Kleinanzeige zusammenpasst. Das ist ungefähr so, wie falschparkende Autos in Landkarten einzeichnen zu wollen.

              1. Hallo,

                Ich frag mich sowieso, inwiefern der Begriff Perma mit Biete/Suche/Kleinanzeige zusammenpasst. Das ist ungefähr so, wie falschparkende Autos in Landkarten einzeichnen zu wollen.

                schön auf den Punkt gebracht. Der Gedanke hat was. ;-)

                So long,
                 Martin

        2. Moin!

          Steht darin dann eine Weiterleitung von der reinen text-url zur parameter-url? Heißt das dann, das jeweils, bei einer neu erstellten Anzeige, die htaccess-Datei um eine neue Weiterleitung ergänzt werden muss?

          Nein. In der von von mir verlinkten Quelle steht wie man das mit einem regulärem Ausdruck löst:

          URI:

          • http://example.com/shop/Elektronik/toller_staubsauger-0815

          soll wie

          • http://example.com/shop.php?item=0815 behandelt werden.

          in der htaccess:

          RewriteEngine on
          RewriteRule   ^/shop/.*-(\d+)$      	/shop.php?item=$1 [L]
          

          Was das tut:

          1.)
          ^/shop/ Suche alles, was mit /shop/ beginnt und mit
          .*- beliebigen Zeichen in beliebiger Anzahl, gefolgt von einem Minus fortgesetzt wird und dem
          (\d+) mindestens eine Ziffer folgt, deren Gruppe Du Dir in $1 gut merkst (die Klammern) und die
          $ am Ende des Strings steht.

          2.) Verarbeite das weiter als sei es die URI

          /shop.php?item=
          gefolgt von den gut gemerkten Ziffern.

          Dann wird
          http://example.com/shop/Elektronik/toller_staubsauger-0815
          behandelt wie:
          http://example.com/shop.php?item=0815

          und
          http://example.com/shop/foo/bar-223
          behandelt wie:
          http://example.com/shop.php?item=223

          Im Skript shop.php steht die übermittelte ID wie gehabt in: $_GET['id'], die ich aber wegen möglicher Fehlangaben putzen würde: $_GET['id']=intval(trim($_GET['id'])). Dann wird aus '0815' auch die Zahl 815. Unter dieser ID als Zahl ist (hoffentlich, alles andere wäre sehr schlecht) der Artikel bzw. die Anzeige auch in der Datenbank gespeichert. Vergeben wird die automatisch, wenn der Artikel eingestellt wird. Lese hierzu unter auto_incement nach. Die URI(s) zusammen zu bauen ist dann triviale Textverarbeitung.

          PHP kann je nach verwendeter Methode des Datenbankzugriffs diese ID auch zurück geben, falls Du das brauchst:

          Die Seite mit der veralteten Datenbankzugriffsmethode verweist im Kasten "Warnung" auf die aktuellen, gebotenen Vorgehensweisen:

          Jörg Reinholz

          1. Herr Reinholz, tausend Dank! Das ist exakt das, wonach ich gesucht habe, sogar mit exzellenter Erklärung!

            Den Link in Ihrer zuvorigen Antwort hatte ich wahrscheinlich geistlich nicht wahrgenommen. Dennoch vielen vielen Dank für Ihren erneuten Anlauf!!

            Liebe Grüße Ulf

    2. Hallo,

      Oft wird dann eine Nummer (folgend: "ID") angehangen:

      autsch, nein. Bestimmt nicht. Höchstens angehängt.

      Die zwei Partizip-Formen von "hängen" werden aber sehr oft verwechselt. Dabei ist es doch so einfach:

      • Ist der aktive Vorgang gemeint, heißt es gehängt. Beispiel:
        Ich habe meinen Mantel an die Garderobe gehängt.
      • Ist der Zustand gemeint, heißt es gehangen. Beispiel:
        Der Mantel hat die letzten vier Wochen da gehangen.

      Sorry, wenn das jetzt klugscheißerisch ankommt, aber das ist ein Fehler, der mir sehr oft unangenehm auffällt; jetzt musste ich einfach mal darauf eingehen.

      So long,
       Martin

    3. Ich habe ein ähnliches Problem, leider verstehe ich hier aber nur Bahnhof, bei diesem Fachjargon.

      [TOFU entfernt]

      1. Aloha ;)

        Ich habe ein ähnliches Problem, leider verstehe ich hier aber nur Bahnhof, bei diesem Fachjargon.

        [TOFU entfernt]

        Dann wäre es wahrscheinlich angebracht, dass du die Zitatfunktion sinnvoll nutzt statt einfach alles zu kopieren. Wenn du uns nicht konkret sagst, wo genau dein Verständnisproblem liegt, können wir dir auch nicht bei der Bewältigung helfen.

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
      2. Moin!

        Ich habe ein ähnliches Problem, leider verstehe ich hier aber nur Bahnhof, bei diesem Fachjargon.

        Nun ja. Es ust auch ein komplexes Problem, welches durch das Zusammenspiel von Webserver, Datenbank und Skriptsprache gelöst wird und deshalb schon Einiges voraussetzt Das ist also nichts für die ersten Schritte, sondern mindestens "Facharbeiterarbeit".

        Jörg Reinholz