Matze: mod_rewrite - Suma Optimierung

Hallo!

Ich arbeite gerade an einer Seite, deren Links ich mit mod_rewrite 'verschönern' möchte.
Also anstatt

http://www.domain.tld/index.php?cat=foo

soll

http://www.domain.tld/foo

oder

http://www.domain.tld/foo/
                         ^
werden.

Welche Variante wäre denn dabei zu bevorzugen?
Und kann ich weitere Parameter per Get anhängen?
Wie müsste das dann aussehen, (...)foo/?cat2=bar
oder (...)foo?cat2=bar ?

Synthaktisch wär ja das Fragezeichen falsch, schließlich wird das schon von mod_rewrite eingefügt. Andererseits wäre (...)foo&cat2=bar logisch gesehen falsch, weil in der Adressleiste etwas vermeintlich 'falsches' steht.

Ihr seht, ich habe tatsächlich gerade erst angefangen mich mit sowas zu beschäftigen. Ich durchwühl auch fleissig das Archiv und Google, nur leider bin ich nicht so fit mit den RegExp und der .htaccess.

Mein Versuch sieht bis jetzt so aus:
RewriteRule ^(.*)/(.*)$ index.php?cat=$2

Jetzt stimmen aber die Pfadangaben zu den Bildern und Scripten nicht mehr.
Erscheint mir auch logisch, dass der Browser jetzt denkt er wäre eine Verzeichnissebene tiefer.

Könnte mir jemand dabei helfen? Ich beschäftige mich damit das erste mal und fühl mich zum DAU zurück versetzt ;)
Ich bin auch für Linktipps dankbar wenn jemand ein schönes Tutorial o.ä. in seiner Linkliste hat, welches ich nicht auch selbst auf der ersten Google-Treffer-Seite finde ;)
Für Rückfragen kann ich mich dann immernoch hier wieder melden.

Danke und Grüße,

Matze

  1. Jetzt stimmen aber die Pfadangaben zu den Bildern und Scripten nicht mehr.
    Erscheint mir auch logisch, dass der Browser jetzt denkt er wäre eine Verzeichnissebene tiefer.

    Stimmt - der Browser verhält sich richtig. Deshalb solltest du allen Bildern absolute Pfade vergeben.

    Gruß,
    EL

    1. Hallo!

      Das mit den Pfaden hatte ich ja bereits gemerkt und mittlerweile geändert.
      Was ich nicht hinkrieg, ist jetzt eine RewriteRule zu schreiben, die alle Unterordner von domain.tld einschließt.

      Schreibe ich rewriteRule ^(.*)$ index.php?cat=$1 läuft das ins Leere.
      Schreibe ich rewriteRule ^(.*)/$ index.php?cat=$1 muss ich die Links auch auf
      domain.tld/foo/
                    ^
      statt domain.tld/foo verlinken.

      Ich versteh nicht, warum ^(.*)$ nicht "funzt" sondern ich auf die index.php weiter geleitet werde.

      Ich bin mir auch nicht schlüssig was "besser" sein soll, domain.tld/foo oder domain.tld/foo/ oder ob es egal ist und egal was - warum ist das dann so? ;)

      Danke und Grüße, Matze

      1. Hi,

        Ich bin mir auch nicht schlüssig was "besser" sein soll, domain.tld/foo oder domain.tld/foo/ oder ob es egal ist und egal was - warum ist das dann so? ;)

        es ist in der Tat egal und Du kannst selbst ?foo weiter verwenden. Nur sollte "foo" das Keyword sein und keine Weiteren Parameter kommen.

        freundliche Grüße
        Ingo

        1. Hallo und guten Abend Ingo!

          Ich bin mir auch nicht schlüssig was "besser" sein soll, domain.tld/foo oder domain.tld/foo/ oder ob es egal ist und egal was - warum ist das dann so? ;)
          es ist in der Tat egal und Du kannst selbst ?foo weiter verwenden. Nur sollte "foo" das Keyword sein und keine Weiteren Parameter kommen.

          Nee nee, "foo" wäre ja der Wert. Also beim Aufruf von http://www.domain.tld/foo/ soll http://www.domain.tld/index.php?cat=foo aufgerufen werden.
          Ich denk mal auf deiner HP ist es auch so gelöst oder du verwendest "echte" Verzeichnisse.

          Aber wenn es egal ist, ist ja alles halb so wild und ich bin schon einen ganzen Schritt weiter.

          Danke und Grüße,
          Matze

          1. hi,

            Aber wenn es egal ist, ist ja alles halb so wild und ich bin schon einen ganzen Schritt weiter.

            Vor noch knappen 14 Stunden kämpfte ich mit dem selben Mist! Also nicht Exakt, Ziel war .htaccess im xampp zu nutzen.

            http://www.modrewrite.de/foren/ftopic82.html

            Es hat zumindest ein wenig geholfen :)

            Kind regards

            --
            I have a Dream...
            Bugs erzeugen gegenbugs.
            Wir müssen Bugs mit Bugs bekämpfen!
            1. Hi Malcolm!

              Vor noch knappen 14 Stunden kämpfte ich mit dem selben Mist! Also nicht Exakt, Ziel war .htaccess im xampp zu nutzen.

              Och naja die ein oder andere Einstellung in der httpd.conf ;)

              http://www.modrewrite.de/foren/ftopic82.html
              Es hat zumindest ein wenig geholfen :)

              Mein Problem ist in der Tat eher die RegExp.
              Jetzt bin ich mir aber glaube einig, dass ich es so lösen werden:
              Die Menüpunkte werden alle über einen entsprechenden Ordner aufgerufen
              (mod_rewrite macht aus "domain.tld/foo/"->"domain.tld/index.php?cat=foo"),
              'Unterpunkte' oder Variablen die mitgeschickt werden müssen, werden dann so angegeben,
              dass mod_rewrite aus "domain.tld/foo/bar-hund-example.php" -> "domain.tld/index.php?cat=foo&var1=bar&var2=hund&var3=example" macht.

              Sobald ich soweit bin, muss ich die RegExp noch für Subdomains anpassen...
              Naja kommt Zeit, kommt Rat und im Moment funktioniert erstmal alles wie es soll :)

              Grüße, Matze

          2. Hi,

            es ist in der Tat egal und Du kannst selbst ?foo weiter verwenden. Nur sollte "foo" das Keyword sein und keine Weiteren Parameter kommen.

            Nee nee, "foo" wäre ja der Wert. Also beim Aufruf von http://www.domain.tld/foo/ soll http://www.domain.tld/index.php?cat=foo aufgerufen werden.

            Du verstehst nicht... statt http://www.domain.tld/foo/ über mod_rewrite zu ermöglichen ist http://www.domain.tld/?foo genauso gut - vorausgesetzt wie gesagt, dass "foo" dem Keyword entspricht.
            Auf index.php kannst Du in der URL genauso verzichten wie auf cat= - beides hat ja keine relevante Aussage in Bezug auf den Inhalt bzw. die Keywords. Zur Verdeutlichung: http://www.google.de/search?hl=de&q=em+latein+anfahrt

            Ich denk mal auf deiner HP ist es auch so gelöst oder du verwendest "echte" Verzeichnisse.

            Es sind echte Verzeichnisse.

            freundliche Grüße
            Ingo

            1. Hallo Ingo!

              Nee nee, "foo" wäre ja der Wert. Also beim Aufruf von http://www.domain.tld/foo/ soll http://www.domain.tld/index.php?cat=foo aufgerufen werden.
              Du verstehst nicht... statt http://www.domain.tld/foo/ über mod_rewrite zu ermöglichen ist http://www.domain.tld/?foo genauso gut - vorausgesetzt wie gesagt, dass "foo" dem Keyword entspricht.

              Ah, jetzt versteh ich. Es geht darum unnötiges oder kryptisches wegzulassen und stattdessen nur den relevanten Wert anzugeben - getrennt durch ein beliebiges Zeichen.

              Die Werte werden dann per mod_rewrite den jeweiligen Parametern übergeben.

              Auf index.php kannst Du in der URL genauso verzichten wie auf cat=(..)

              Naja, bei der Weiterleitung RewriteRule ^(.*)/$ index.php?cat=$1 ist index.php schon sinnvoll oder? Oder meinst du ich soll direkt RewriteRule ^(.*)/$ ?kat=$1 schreiben?
              Oder gehörte das noch zu dem oberen Absatz?

              Ich denk mal auf deiner HP ist es auch so gelöst oder du verwendest "echte" Verzeichnisse.
              Es sind echte Verzeichnisse.

              Solang es nicht zu viele werden und es sich nicht um unbekannte(dynamische) handelt sicher zu bevorzugen.

              Danke und Grüße, Matze

              1. Hi,

                Du verstehst nicht... statt http://www.domain.tld/foo/ über mod_rewrite zu ermöglichen ist http://www.domain.tld/?foo genauso gut - vorausgesetzt wie gesagt, dass "foo" dem Keyword entspricht.

                Ah, jetzt versteh ich. Es geht darum unnötiges oder kryptisches wegzulassen und stattdessen nur den relevanten Wert anzugeben - getrennt durch ein beliebiges Zeichen.

                Die Werte werden dann per mod_rewrite den jeweiligen Parametern übergeben.

                offenbar verstehst Du das doch erst nur teilweise. Du brauchst mod_rewrite gar nicht!
                Wenn Du alles über die index.php steuerst, kannst Du dies dank DirectoryIndex schon mal weglassen. *Einen* Parameter kannst Du ohne Schlüssel im Query-String übergeben, wenn Du also ein Seite über Ferienwohnungen SEO-wirksam verlinken willst, dann über "?Ferienwohnungen".
                Anstatt nun über mod_rewrite die Anfrage umzuleiten, kannst Du Deinem PHP-Script auch beibringen, diesen Query-String zu verarbeiten.

                freundliche Grüße
                Ingo