Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] URL manipulieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] URL manipulieren

    Hi all,

    ich stehe auf dem Schlauch. Und zwar will ich eine Seite mit einer Wortsuche erstellen. Dazu habe ich eine Datenbank angelegt mit einer Wörterliste und einer Beschreibungsliste, die aufeinander abgestimmt sind. Nur sieht das Ergebnis in der Browserzeile nicht wie gewünscht aus.

    Im ersten Screenshot ist ein Ausschnitt aus der Seite zu sehen und zwar wurde hier auf den Buchstaben "B" geklickt und es werden alle Wörter mit dem Buchstaben "B" angezeigt. In diesem Beispiel ist es nur "Berlin". Bis hierhin alles okay:


    Aber jetzt, wenn ich auf Berlin klicke, steht in der Browserzeile:
    "http://example.com/index.php?wort=BERLIN&l=B&p=1".


    Ich aber möchte gerne, dass das in der Form "http://example.com/wort-BERLIN.htm" steht. Ich habe es mit der htaccess-datei rumversucht, kein Erfolg.

    Wenn ich es in der zum Skript gehörigen index.php Datei manuell "wort-" bei den a href Bezeichnungen hinzufüge, sieht die Browserzeile zwar so aus wie ich wünsche, aber es wird kein Beitrag mehr gefunden. Es wird also nicht mehr das Wort und die dazugehörige Beschreibung angezeigt:




    Kann man mir da jemand helfen?
    Wie kann ich beispeilsweise mithilfe von mod_rewrite die Zeile
    "http://example.com/index.php?wort=BERLIN&l=B&p=1" in "http://example.com/wort-BERLIN.htm" umformen, ich habe es leider nicht geschafft

    Vielen Dank im voraus

    deagle


  • #2
    So rum geht es auch nicht. Deine .htaccess kann eine URL so umformen, dass aus einem
    http://example.com/wort-BERLIN.htm
    ein
    http://example.com/index.php?wort=BERLIN&l=B&p=1
    wird. Allerdings macht man das heute etwas anders.

    Aktuell sieht eine .htaccess datei ueberall so aus:

    PHP-Code:
    RewriteEngine on
    RewriteCond 
    %{REQUEST_FILENAME} !-f
    RewriteCond 
    %{REQUEST_FILENAME} !-d
    RewriteRule 
    index.php [L
    Das heisstz soviel wie "Wenn es die angeforderte Datei (!-f), oder das Verzeichnis (!-d) nicht gibt, leite auf index.php weiter".

    In der index.php kannst du den Request dann parsen. Alles notwendige steht dann in der $_SERVER:

    PHP-Code:
    print_r($_SERVER); 
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Hi danke für die Antwort,

      aber soweit ich weiss war das doch genau für so einen Fall?
      Ich bin auch kein Profi, aber ich hatte folgendes Beispiel gesehen:
      Code:
      RewriteEngine on
      RewriteRule ^(.*)/(.*)\.htm$ index.php?main=$1&sub=$2
      für die form: index.php?main=blubb&sub=blubber.

      jetzt bin ich etwas verwirrt, muss mir das nochmal anschauen

      Kommentar


      • #4
        Die meisten (größeren und moderneren) Webanwendungen haben eine Routing-Komponente. Das heißt die (PHP-)Anwendung analysiert die Route selbstständig und führt dann die korrekten Anweisungen aus. Bei der Variante von dir geschieht das Routing quasi in der .htaccess-Datei was unflexibler ist:
        a) müssen die Routen alle statisch eingetragen werden und die .htaccess-Datei oft geändert werden.
        b) Änderungen in URLs stellt dich vor eine große Aufgabe wenn du dann die .htaccess-Datei anpassen musst.

        Wenn die Anwendung aber schon fertig ist, würde ich trotzdem darauf verzichten. Wo genau hängst du jetzt aber?

        Kommentar


        • #5
          Grad mal ein Beispiel aus eigener Erfahrung:
          Schau einfach mal in das Routing von Symfony2 z.B. rein.
          Da legst du in einer Config/direkt über den Methoden eine Route zu der jeweiligen Funktion fest.
          Symfony löst dann diese Route selbstständig auf, sodass du dann die Parameter in der Funktion zur Verfügung hast .

          Wie schon gesagt wird, wird das nicht mehr mit mod_rewrite gemacht, sondern direkt mit PHP, was an sich eingentlich gar nicht so schwer zu verstehen ist .

          Kommentar


          • #6
            Den richtigen Pfad musst du clientseitig zusammenbasteln (location("header fad"))

            Das ganze dann mit einer Routing-Engine entsprechend auflösen (wie bereits erwähnt).
            Das p=1 in deinem Pfad kommt vermutlich von irgendeinem Feld in deinem Formular - die Formular-Definition wäre dort ganz hilfreich.

            Code:
            // require jquery
            $("#formular#button").on("click", function() {
              pfad = serverpfad + "wort-" + $("#inputfeld").val().toUpperCase() + ".htm";
              window.location = pfad;
            });
            // nicht getestet

            Kommentar


            • #7
              oh das ist jetzt viel neues für mich..
              ich kannte bisher nur die variante mit mod_rewrite..
              von symfony hatte ich zuvor nie etwas gehört, ich habe es runtergeladen, aber dort sind ja auch zig dateien.. da muss ich erst einmal durchgucken..

              @Kagu.chan, kann man so einen Code in den mod_rewrite setzen?

              Ich bin mittlerweise so weit gekommen, dass in der Browserzeile steht:
              "http://www.example.com/BERLIN.htm"
              Muss nur noch dieses "wort-" davor bekommen ---> "http://www.example.com/BERLIN.htm".

              Kann man denn kein String in den a href Verweis setzen? Ich hatte mir das viel einfacher vorgestellt, ich danke euch vielmals für die Tipps


              edit:
              habe es geschafft über mod_rewrite, einfach am anfang des Strings "Wort-" einfügen.. hatte es immer an die falsche Stelle gepackt.

              Danke!

              Kommentar

              Lädt...
              X