Antman: mod_rewrite Anfängerfrage

Hallo Board,

also momentan sieht der Aufbau meiner Webseite so aus:

/pages/catalog.php
/pages/news.php
/pages/jobs.php
/pages/links.php

etc

Nun möchte ich aber eine suchmaschinenfreundliche Struktur.
Ein gutes URL Interface für den Besucher.

Dazu habe ich mir diverse Artikel angeschaut, aber nicht so richtig verstanden.

Muss ich nun meine Ordnerstruktur komplett ändern ?
Auf meinem lokalen System benutze ich Windows 2000. Kann man da überhaupt mit .htaccess Dateien arbeiten ?

Habe gerade mal eine .htaccess im Wurzel erstellt:

RewriteEngine On
RewriteBase /
RewriteRule ^/products/([0-9]+).html$ /pages/catalog.php?pid=$1 [L,QSA]

Es kommt nur die Fehlermeldung:

Forbidden

You don't have permission to access /products/ on this server.
Apache/2.0.50 (Win32) PHP/4.3.8 Server at utf_dir Port 80

Warum nur ?

  1. Nun möchte ich aber eine suchmaschinenfreundliche Struktur.
    Ein gutes URL Interface für den Besucher.

    Dazu habe ich mir diverse Artikel angeschaut, aber nicht so richtig verstanden.

    der trick besteht darin, der suchmaschine statische seiten vorzugauckeln. werden idr. durch .htm oder .html erkannt.

    Muss ich nun meine Ordnerstruktur komplett ändern ?

    nein. du must lediglich dafür sorgen, daß die seiten mit der endung .htm aufrufbar sind.

    Auf meinem lokalen System benutze ich Windows 2000. Kann man da überhaupt mit .htaccess Dateien arbeiten ?

    das ist keine angelegenheit des bs, sondern des webservers. mit apache kannst du selbstverständlich in jedes verzeichnis eine .htaccess legen, und dort der rewrite erledigen.

    wenn du aber grundsätzlich alle .php requests auf .htm haben möchtest, kannst du diesen rewrite besser generell in der http.conf machen.

    1. nein. du must lediglich dafür sorgen, daß die seiten mit der endung .htm aufrufbar sind.

      Das heißt ich muss einen Order /products erstellen und eine leere index.html stecken ?

      das ist keine angelegenheit des bs, sondern des webservers. mit apache kannst du selbstverständlich in jedes verzeichnis eine .htaccess legen, und dort der rewrite erledigen.

      OK verstanden. Danke. :)

      wenn du aber grundsätzlich alle .php requests auf .htm haben möchtest, kannst du diesen rewrite besser generell in der http.conf machen.

      Aber auf die http.conf meines Providers habe ich doch keinen Einfluss. Wie soll ich die verändern ? Das kann doch nur der Provider.

      Momentan sind die php Dateien alle in einem Order www.domain.de/pages/

      Ich möchte aber, dass der Besucher www.domain.de/products/bananen/ eingeben kann aber intern das Skript /pages/catalog.php?id=bananen aufgerugen wird.

      1. nein. du must lediglich dafür sorgen, daß die seiten mit der endung .htm aufrufbar sind.

        Das heißt ich muss einen Order /products erstellen und eine leere index.html stecken ?

        nein - du mußt lediglich durch ein rewite dem apache mitteilen, daß für die nicht existierenden .htm seiten die .php seiten aufzurufen sind. der apache schreibt den aufruf gemäß deiner rewrite anweisung um, und ruft dann die seite auf.

        wenn du aber grundsätzlich alle .php requests auf .htm haben möchtest, kannst du diesen rewrite besser generell in der http.conf machen.

        Aber auf die http.conf meines Providers habe ich doch keinen Einfluss. Wie soll ich die verändern ? Das kann doch nur der Provider.

        dann bleibt dir nur .htaccess im jeweiligen verzeichnis abzulegen.

        1. nein - du mußt lediglich durch ein rewite dem apache mitteilen, daß für die nicht existierenden .htm seiten die .php seiten aufzurufen sind. der apache schreibt den aufruf gemäß deiner rewrite anweisung um, und ruft dann die seite auf.

          Aber wiieeeeeeee? Habe gegoogelt ohne Ende und nicht ein Tutorial gefunden.
          Diese Tutorial:

          http://httpd.apache.org/docs/mod/mod_rewrite.html

          ist so schwer verständlich. Könnte mir keiner einen Startpunkt geben? So dass ich von da an experimentieren kann ?

          dann bleibt dir nur .htaccess im jeweiligen verzeichnis abzulegen.

          Also im Root reicht nicht ? Also ein Verzeichnis /products erstellen und dann die htaccess dort rein legen?

    2. Moin!

      der trick besteht darin, der suchmaschine statische seiten vorzugauckeln. werden idr. durch .htm oder .html erkannt.

      Nein, die URL-Endung hat damit nichts zu tun. Viel wichtiger sind vernünftige HTTP-Header!

      Muss ich nun meine Ordnerstruktur komplett ändern ?

      nein. du must lediglich dafür sorgen, daß die seiten mit der endung .htm aufrufbar sind.

      Wie gesagt: Die Endung ist irrelevant. Wirklich! Google indiziert Millionen von PHP-Seiten.

      - Sven Rautenberg

      1. der trick besteht darin, der suchmaschine statische seiten vorzugauckeln. werden idr. durch .htm oder .html erkannt.

        Nein, die URL-Endung hat damit nichts zu tun. Viel wichtiger sind vernünftige HTTP-Header!

        http-header sollten immer dabei sein. egal welche extension benutzt wird.
        aber woran kann ein client erkennen, ob es sich um statische oder dynamische seiten handelt ?
        idr. stören sich suchmaschinen an parametern. diese sind immer verdächtig.

        Muss ich nun meine Ordnerstruktur komplett ändern ?

        nein. du must lediglich dafür sorgen, daß die seiten mit der endung .htm aufrufbar sind.

        Wie gesagt: Die Endung ist irrelevant. Wirklich! Google indiziert Millionen von PHP-Seiten.

        stimmt, meine (.php) frißt der wie verrückt.
        die extension .htm ist ja nur konvention.

  2. Moin!

    Hallo Board,

    Üargs! Wir sind hier ein Forum, kein Board!

    also momentan sieht der Aufbau meiner Webseite so aus:

    /pages/catalog.php
    /pages/news.php
    /pages/jobs.php
    /pages/links.php

    Das ist doch bestens.

    Nun möchte ich aber eine suchmaschinenfreundliche Struktur.

    Die hast du bereits.

    Ein gutes URL Interface für den Besucher.

    Wozu? Hast du keine Links, die man anklicken kann?

    Dazu habe ich mir diverse Artikel angeschaut, aber nicht so richtig verstanden.

    Muss ich nun meine Ordnerstruktur komplett ändern ?

    Ich würde das nur tun, wenn du wirklich gute Gründe dafür hast. Denn sofern die Suchmaschinen dich schon indiziert haben, mußt du natürlich Weiterleitungen von den alten Seiten auf die neuen Adressen setzen.

    Auf meinem lokalen System benutze ich Windows 2000. Kann man da überhaupt mit .htaccess Dateien arbeiten ?

    Wenn du Apache benutzt, dann geht es.

    RewriteEngine On
    RewriteBase /
    RewriteRule ^/products/([0-9]+).html$ /pages/catalog.php?pid=$1 [L,QSA]

    Aha. Wenn deine dynamischen Seiten in den Suchmaschinen gefunden werden sollen, dann mußt du der Suchmaschine auch einen Grund geben, die Seite für längere Zeit zu speichern.

    PHP sendet, damit die Dynamik auch beim User ankommt, in den HTTP-Headern immer mit "Seite nicht cachen, ist sowieso gleich wieder ungültig". Das ist für Suchmaschinen kein Anreiz, die Seite in den Index aufzunehmen, sondern mit hoher Wahrscheinlichkeit der Anhaltspunkt für eine echt dynamische Website.

    Wenn du bessere Chancen in den Suchmaschinen haben willst, solltest du zunächst mal deine HTTP-Header verbessern. Also das Cachen und die Gültigkeitsdauer verlängern, am besten auch ein last-modified-Datum mit angeben (und wenn du das serverseitig auswertest und bei Bedarf eben _keine_ neue Komplettseite rausschickst, sondern nur Status 304, würde das sogar das Surferlebnis beschleunigen).

    Es kommt nur die Fehlermeldung:

    Forbidden

    You don't have permission to access /products/ on this server.
    Apache/2.0.50 (Win32) PHP/4.3.8 Server at utf_dir Port 80

    Das ist ein deutliches Zeichen dafür, dass irgendwas noch nicht stimmt. :) Was das sein kann, steht im Logfile deines Apaches.

    - Sven Rautenberg

    1. Hallo,

      Üargs! Wir sind hier ein Forum, kein Board!

      Der Unterschied ist mir wohl bekannt. Hatte mich nur vertan, dan ich kurz zuvor die ganze Zeit in einem Board gepostet habe. :)

      Ein gutes URL Interface für den Besucher.

      Ich möchte soetwas:
      http://www.alistapart.com/articles/succeed/
      Das kling für mich sehr plausibel und ist auch die Empfehlung des W3.

      Ich würde das nur tun, wenn du wirklich gute Gründe dafür hast. Denn sofern die Suchmaschinen dich schon indiziert haben, mußt du natürlich Weiterleitungen von den alten Seiten auf die neuen Adressen setzen.

      Das nehme ich in Kauf. Ich möchte, dass Besucher bestimmte Rubrigen intuitiv finden können. Habe mir schon meine Gedanken gemacht.

      Wenn du bessere Chancen in den Suchmaschinen haben willst, solltest du zunächst mal deine HTTP-Header verbessern. Also das Cachen und die Gültigkeitsdauer verlängern, am besten auch ein last-modified-Datum mit angeben (und wenn du das serverseitig auswertest und bei Bedarf eben _keine_ neue Komplettseite rausschickst, sondern nur Status 304, würde das sogar das Surferlebnis beschleunigen).

      OK, das ist aber ein anderes Problem. Ich möchte ja das URL Interface verändern. Jetzt mal die Suchmaschinen außer Acht gelassen.

      Das ist ein deutliches Zeichen dafür, dass irgendwas noch nicht stimmt. :) Was das sein kann, steht im Logfile deines Apaches.

      Ja, aber was auch immer das ist. Haber aber NULL Ahnung von mod_rewrite und Einsteigertuts scheint es nicht zu geben. Nur superkomplizierte Referenzen und Dokus.

      :(

      Werde mir aber nun mal die Logs anschauen.

      1. D:/utf_dir/products/
        127.0.0.1 - - [14/Sep/2004:16:09:12 +0200] "GET /products/ HTTP/1.1" 403 303

      2. Moin!

        Ich möchte soetwas:
        http://www.alistapart.com/articles/succeed/
        Das kling für mich sehr plausibel und ist auch die Empfehlung des W3.

        Richtig. Diesen Ansatz wähle ich eigentlich auch immer, wenn ich darauf soviel Einfluß nehmen kann. Die Alternative ist, statische Seiten unter den gewünschten URLs zu generieren und abzulegen.

        Ich würde das nur tun, wenn du wirklich gute Gründe dafür hast. Denn sofern die Suchmaschinen dich schon indiziert haben, mußt du natürlich Weiterleitungen von den alten Seiten auf die neuen Adressen setzen.

        Das nehme ich in Kauf. Ich möchte, dass Besucher bestimmte Rubrigen intuitiv finden können. Habe mir schon meine Gedanken gemacht.

        Dann ist ja gut. Du klangst anfangs so, als ob du nur einer "Mode" folgen wolltest. URLs zu ändern, nur weil man sie verändern will, ist nämlich keine so gute Idee.

        Ja, aber was auch immer das ist. Haber aber NULL Ahnung von mod_rewrite und Einsteigertuts scheint es nicht zu geben. Nur superkomplizierte Referenzen und Dokus.

        Wie erwähnt: rewriting in .htaccess ist zwar möglich, aber ich persönlich mag es nicht. Wenn du rumprobieren willst, probiere deine ersten Schritte erst einmal in der httpd.conf, im <VirtualHost>-Container deines Testservers. Und wenn du online auch an die httpd.conf rankommst, solltest du diese Möglichkeit dort auch nutzen.

        - Sven Rautenberg

        1. Hallo,

          Wie erwähnt: rewriting in .htaccess ist zwar möglich, aber ich persönlich mag es nicht. Wenn du rumprobieren willst, probiere deine ersten Schritte erst einmal in der httpd.conf, im <VirtualHost>-Container deines Testservers. Und wenn du online auch an die httpd.conf rankommst, solltest du diese Möglichkeit dort auch nutzen.

          Ja, aber da ich keinen Einfluss auf die http.conf habe würde ich lieber direkt mit der .htaccess experimentieren. Habe auch noch viele andere Dinge zu verbessern.

          Jemand gab mir freundlicherweise folgendes Tutorial. Klappt aber nicht.
          http://www.php-resource.de/forum/showthread.php?s=&threadid=12722

          1. Moin!

            Jemand gab mir freundlicherweise folgendes Tutorial. Klappt aber nicht.
            http://www.php-resource.de/forum/showthread.php?s=&threadid=12722

            Zitat von der Webseite:
            ---schnipp---
            Du bist nicht angemeldet oder Du hast keine Rechte diese Seite zu betreten. Dies könnte einer der Gründe sein:
            Du bist nicht angemeldet. Bitte fülle die Felder unten auf der Seite aus.
            Du hast keine Rechte diese von Dir aufgerufene Seite zu betreten. Versuchst Du vielleicht den Beitrag eines anderen Nutzers zu bearbeiten oder eine Aktion durchzuführen, die Administratoren vorbehalten ist? Bitte prüfe in den Forum Regeln, ob Du die Erlaubnis für diese Aktion hast.
            Du versuchst einen Beitrag zu verfassen und Du hast keine Schreibrechte oder Du wartest noch auf die Aktivierung Deiner Registrierung.
            ---schapp---

            Ist also kein Wunder, dass das nicht klappt.

            - Sven Rautenberg

            1. OH,

              hatte vergessen, dass man dort Mitglied sein muss.
              Also kopieren ich es mal für dich:

              <ausTutorial>
              Hallo Zusammen.

              Nun war ich lange auf der Suche nach eine Lösung für die RewriteEngine.
              Siehe Thread von teresiak -> http://www.php-resource.de/forum/sh...=&threadid=8959

              Leider hatte es alles nicht so geklappt, wie ich es wollte. Ich hatte einige Personen aus meinem Umfeld angesprochen und auch Lösungen erhalten, die wie die von 'teresiak' war.

              Jedoch hat alles nicht funktioniert. Habe auch einen Post im Forum gemacht, aber leider keine Antwort. Nach langem suchen habe ich es zufällig entdeckt. Ein dummer Slash war alles schuld!

              Nun will ich Euch 'Suchmaschinenfreundliches Programmieren! / Verzeichnisstruktur - Teil 2' nicht vorenthalten. Vielleicht gibt es noch mehr, die danach suchen.

              Erstellt einfach die zwei Dateien.

              datei .htaccess

              code:RewriteEngine on
              RewriteRule ^irgendeinunterverzeichnis/(.*)/(.*)/(.*)/(.*)/$   /auswertung.php?p1=$1&p2=$2&p3=$3
              RewriteRule ^ersterparameter/(.*)/$                            /auswertung.php?p1=$1&p2=&p3=
              RewriteRule ^zweiterparameter/(.*)/$                           /auswertung.php?p1=&p2=$1&p3=

              datei auswertung.php (muss ins root gelegt werden, oder die angaben in .htaccess müssen angepasst werden.

              PHP:
              <pre>

              parameter 1: <?php echo isset($_GET['p1']) ? $_GET['p1'] : 'p1 - nicht vorhanden ...'; ?>

              parameter 2: <?php echo isset($_GET['p2']) ? $_GET['p2'] : 'p2 - nicht vorhanden ...'; ?>

              parameter 3: <?php echo isset($_GET['p3']) ? $_GET['p3'] : 'p3 - nicht vorhanden ...'; ?>

              </pre>

              Wenn alles richtig ist, könnt ihr folgende URLs aufrufen:

              erste Regel:
              http://[---www.euerwebserver.de---]/irgendeinunterverzeichnis/erster/zweiter/dritter/vierter/

              zweite Regel:
              http://[---www.euerwebserver.de---]/ersterparameter/ALLESOK/

              dritte Regel:
              http://[---www.euerwebserver.de---]/zweiterparameter/INHALT/

              Ihr könnt auch ein wenig mit den Paramtern spielen und weitere Regeln hinzufügen.

              Alle Regeln werden in der angegebenen Reihenfolge abgearbeitet. Trifft eine Regel zu, werden die nachfolgenden Regeln ignoriert. Ihr solltet euch da also Gedanken machen, in welcher Reihenfolge ihr eine Prüfung vornehmt.

              Durch diese Lösung benötigt man noch nicht einmal eine Datei, die die Paramter aus der REQUEST_URI ausliest.

              Fast hätte ich es vergessen. Die RewriteEngine muss bei eurem Provider im Apache einkompiliert sein.

              Sucht bei phpinfo() nach mod_rewrite.
              Ab der ApacheVersion 1.1 ist es möglich.
              Ab der ApacheVersion 1.2 ist es Bestandteil.

              Ich hoffe nicht, dass ich was wichtiges vergessen habe.

              Also viel Spass beim Rewriten.

              </ausTutorial>

              Also habe beide Dateien im Root abgelegt es kommt aber nur die Fehlermeldung:

              Fehler:

              Forbidden

              You don't have permission to access /products/ on this server.
              Apache/2.0.50 (Win32) PHP/4.3.8 Server at utf_dir Port 80

              Geht das auch mit Apache 2 standardmäßig?
              Habe nämlich in der phpinfo nichts von mod_rewrite gefunden.

    2. apropo http-header.

      um die seite aus dem internet heraus zu prüfen, benutze ich immer rex swains http viewer.

  3. Hallo,

    Forbidden

    You don't have permission to access /products/ on this server.
    Apache/2.0.50 (Win32) PHP/4.3.8 Server at utf_dir Port 80

    Ein 403-Fehler in Zusammenhang mit mod_rewrite bedeutet, dass Du noch

    Options +FollowSymlinks

    oder

    Options +SymlinksIfOwnerMatch

    setzen musst.

    Viele Grüße,
    Christian

    1. Ein 403-Fehler in Zusammenhang mit mod_rewrite bedeutet, dass Du noch
      Options +FollowSymlinks
      oder Options +SymlinksIfOwnerMatch setzen musst.

      Wie genau geht das?

      1. Hallo Antman,

        Ein 403-Fehler in Zusammenhang mit mod_rewrite bedeutet, dass Du noch
        Options +FollowSymlinks
        oder Options +SymlinksIfOwnerMatch setzen musst.

        Wie genau geht das?

        Naja, Du schreibst es zu den Rewrite-Rules in Deine .htaccess rein:

        ----------------------------------
        Options +SymlinksIfOwnerMatch

        RewriteCond ...
        RewriteRule ...
        ...
        ----------------------------------

        Viele Grüße,
        Christian