Moped: ULR rewrite

Hallo Forum,

was könnte der Grund sein, dass ich ein url not found 404 bekomme?

rewriteEngine on
Options +FollowSymLinks
RewriteBase /

RewriteRule  ^lebenslauf/index.html$ /php/de/lebenslauf.php
RewriteRule  ^lebenslauf/$ /php/lebenslauf.php

Die Dateien sind vorhanden. Die .htaccess liegt im root.

  1. Hi Moped,

    rewriteEngine on

    Müsste eigentlich ein großes R am Anfang sein...

    RewriteRule  ^lebenslauf/index.html$ /php/de/lebenslauf.php
    RewriteRule  ^lebenslauf/$ /php/lebenslauf.php

    So generell kann man da natürlich nicht viel sagen - deshalb kann ich dir nur zwei allgemeine Tipps geben. Probier erst mal an die RewriteRule hinten dran ein [R] zu hängen, das bewirkt, dass der Besucher umgeleitet wird, also die Adresse der neuen Datei auch beim Besucher im Adressfeld angezeigt wird. Dann kannst du erst mal sehen, ob der Apache die (sonst interne) Umleitung auch so vorgenommen hat, wie du es dir vorstellst, schreib also mal:

    RewriteRule ^lebenslauf/index.html$ /php/de/lebenslauf.php [R]

    Weiterhin solltest du natürlich noch in die error_log (unter Win error.log) Datei deines Apaches gucken - was steht da für eine Fehlermeldung drin? Und natürlich: Ist für das Verzeichnis (den Document Root) überhaupt eine .htaccess Datei erlaubt? Ist also AllowOverride nicht auf None gesetzt?

    MfG, Dennis.

    1. Aja, folgendes könnte das Problem sein:

      <Directory />
          Options FollowSymLinks
          AllowOverride None
      </Directory>

      Allerdings akzepziert er "allow" noch "allowed".

      Was sind die akteptierten Werte dafür:

      <Directory />
          Options FollowSymLinks
          AllowOverride Allowed
      </Directory>

      1. [Sun Apr 30 14:02:55 2006] [error] [client 127.0.0.1] File does not exist: H:/_homepages/hp1/deploy/lebenslauf
        127.0.0.1 - - [30/Apr/2006:14:02:55 +0200] "GET /lebenslauf/ HTTP/1.1" 404 295

        1. Hi Moped,

          [Sun Apr 30 14:02:55 2006] [error] [client 127.0.0.1] File does not exist: H:/_homepages/hp1/deploy/lebenslauf

          Aha, er findet also /lebenslauf/ nicht - es ist nicht so, dass er /php/de/lebenslauf.php nicht findet. Das sieht so aus, als hätte die RewriteRule gar nicht gegriffen.

          Warum dies jedoch so ist kann verschiedene Ursachen haben - entwerder ist die RewriteRule nicht treffend formuliert (was in diesem Fall aber nicht so aussieht) oder RewriteEngine on ist nicht gesetzt (ist es aber) oder die .htaccess Datei wird nicht beachtet, weil AllowOverride FileInfo nicht gegeben ist.

          MfG, Dennis.

      2. Hi Moped,

        Aja, folgendes könnte das Problem sein:

        <Directory />
            Options FollowSymLinks
            AllowOverride None
        </Directory>

        STOP! An dieser Stelle bezieht sich das AllowOverride auf ALLE(!) Verzeichnise auf deinem PC, weil / das oberste Verzeichnis ist und alles andere ja Unterverzeichnisse davon sind. Deshalb solltest du an dieser Stelle das AllowOverride auf jeden Fall stehen lassen!

        Guck mal in deiner httpd.conf ob du irgendwo ein <Directory /pfad/zu/deinem/documentroot> findest und ob darin vielleicht etwas steht. Wenn es so einen Directory-Container nicht gibt oder in dem vorhandenen kein AllowOverride drinsteht ergänze es um folgendes:

        # Beachte auch die verlinkten Seiten  
        <[link:http://httpd.apache.org/docs/2.0/mod/core.html#directory@title=Directory] /pfad/zu/deinem/ordner>  
        # Unter Windows "C:/pfad/zu/deinem/ordner" schreiben  
          [link:http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride@title=AllowOverride] FileInfo  
          # Wenn da bis jetzt AllowOverride AuthConfig stand, dann kannst du das erweitern indem  
          # du AllowOverride AuthConfig FileInfo schreibst  
        </Directory>
        

        MfG, Dennis.

        1. Aja, hab es gefunden. Habe es nun mal auf all gesetzt:

          <Directory "h:/_homepages">
            Options Indexes FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
          </Directory>

          Nun kommt aber eine fette Fehlermeldung:

          Internal Server Error

          The server encountered an internal error or misconfiguration and was unable to complete your request.

          Please contact the server administrator, webmaster@none.none and inform them of the time the error occurred, and anything you might have done that may have caused the error.

          More information about this error may be available in the server error log.

          1. Hallo Moped.

            More information about this error may be available in the server error log.

            Und genau diesen solltest du überprüfen.

            Einen schönen Sonntag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
            [HTML Design Constraints: Logical Markup]
            1. Hallo Ashura,

              [Sun Apr 30 14:20:23 2006] [alert] [client 127.0.0.1] H:/_homepages/hp1/deploy/.htaccess: Invalid command 'rewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration
              127.0.0.1 - - [30/Apr/2006:14:20:23 +0200] "GET /lebenslauf HTTP/1.1" 500 625

              Hmm, falsch geschrieben?

              1. Hallo,

                [Sun Apr 30 14:20:23 2006] [alert] [client 127.0.0.1] H:/_homepages/hp1/deploy/.htaccess: Invalid command 'rewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration 127.0.0.1 - - [30/Apr/2006:14:20:23 +0200] "GET /lebenslauf HTTP/1.1" 500 625
                Hmm, falsch geschrieben?

                ja, so steht es da. Achte mal auf die Groß/Kleinschreibung.
                Ist mir aber auch neu, dass die in der Apache-Config beachtet wird. ;-)

                Ciao,
                 Martin

                --
                Auf jeden Menschen auf der ganzen Welt entfallen statistisch gesehen etwa 3000 Spinnen, wie Wissenschaftler jetzt festgestellt haben.
                Wer will meine haben? Denn ich will sie bstimmt nicht.
              2. Hallo Moped.

                […] Invalid command 'rewriteEngine', perhaps mis-spelled […]

                Hmm, falsch geschrieben?

                Hehe, noch deutlicher geht es gar nicht mehr.
                Beachte auch Dennis’ ersten Kommentar:

                rewriteEngine on

                Müsste eigentlich ein großes R am Anfang sein...

                Einen schönen Sonntag noch.

                Gruß, Ashura

                --
                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                [HTML Design Constraints: Logical Markup]
                1. Großgeschrieben:

                  RewriteEngine on

                  ergibt leider den gleichen Fehler. Daran kann es also nicht liegen.

                  1. Hier noch mal zur Übersicht wie es nun aussieht:

                    RewriteEngine on
                    Options +FollowSymLinks
                    RewriteBase /

                    RewriteRule  ^lebenslauf/index.html$ /php/lebenslauf.php [R]
                    RewriteRule  ^lebenslauf/$ /php/lebenslauf.php [R]

                    RewriteRule  ^lebenslauf/ausbildung/index.html$ /php/ausbildung.php [R]
                    RewriteRule  ^lebenslauf/ausbildung$ /php/ausbildung.php [R]

                    RewriteRule  ^lebenslauf/berufserfahrung/index.html$ /php/berufserfahrung.php [R]
                    RewriteRule  ^lebenslauf/berufserfahrung/$ /php/berufserfahrung.php [R]

                    1. Hallo,

                      wenn Du eh nur auf PHP-Scripte weiterleiten willst, dann ist möglicherweise Pseudo-URLs durch PATH_INFO etwas für Dich.

                      Gruß aus Berlin!
                      eddi

                      1. Nein, nein. Die Hyrarchie soll Skriptunabhängig sein. Werde vielleicht in ein paar Monaten auf JSP umstellen.

                        Möchte das gerne über den Apache realisieren.

                  2. Hallo Moped.

                    Großgeschrieben:

                    RewriteEngine on

                    ergibt leider den gleichen Fehler. Daran kann es also nicht liegen.

                    Du hast das erforderliche Modul per „LoadModule rewrite_module [Dateipfad]“ geladen? Der Dateipfad hierbei stimmt auch?

                    Einen schönen Sonntag noch.

                    Gruß, Ashura

                    --
                    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                    [HTML Design Constraints: Logical Markup]
                    1. Du hast das erforderliche Modul per „LoadModule rewrite_module [Dateipfad]“ geladen? Der Dateipfad hierbei stimmt auch?

                      Jo habe ich:

                      LoadModule rewrite_module modules/mod_rewrite.so

                    2. Am VC kann es nicht liegen, oder?

                      <VirtualHost *:80>
                          <Directory>
                              AllowOverride All
                          </Directory>
                          ServerAdmin webmaster@none.none
                          DocumentRoot h:/_homepages/hp1/deploy
                          ServerName hp1
                          ErrorLog logs/hp1_log
                          CustomLog logs/hp1_log common
                      </VirtualHost>

                      1. Hallo Moped.

                        <Directory>
                                AllowOverride All
                            </Directory>

                        AFAIK musst du hier auch den Pfad angeben, für den die Directory-Direktive wirken soll.

                        Einen schönen Sonntag noch.

                        Gruß, Ashura

                        --
                        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                        [HTML Design Constraints: Logical Markup]
                        1. AFAIK musst du hier auch den Pfad angeben, für den die Directory-Direktive wirken soll.

                          Mit Pfad geht es auch nicht. Aber innerhalb eines VC Containers braucht man den Pfad glaube ich nicht. Bezieht sich doch dann automatisch auf den root.

                          Jetzt kommt aber als Fehler:

                          [Sun Apr 30 14:50:42 2006] [alert] [client 127.0.0.1] H:/_homepages/hp1/deploy/.htaccess: Options not allowed here
                          127.0.0.1 - - [30/Apr/2006:14:50:42 +0200] "GET /lebenslauf/ HTTP/1.1" 500 625

                          1. Habe die Options-Zeile in der .htaccess nun mal auskommentiert und nun klappt es.

                            Nun habe ich noch eine letzte Frage/Problem

                            Man kann zwar hp1/lebenslauf/ eingeben und wird dann zur richtigen Datei weitergeleitet.

                            Wenn man nun aber hp1/lebenslauf ohne den letzten Slah eingibt klappt es nicht. Das verwirrt den Besucher sicher. Wie löst man das Problem?

                            1. Hi Moped,

                              Wenn man nun aber hp1/lebenslauf ohne den letzten Slah eingibt klappt es nicht. Das verwirrt den Besucher sicher. Wie löst man das Problem?

                              Passe deine RewriteRule entsprechend an:

                              RewriteRule ^lebenslauf(/)?$ /php/lebenslauf.php

                              Die beiden runden Klammern kannst du glaube ich auch noch weglassen, bin ich mir aber gerade nicht ganz sicher.

                              MfG, Dennis.

                              1. Hallo Dennis.

                                RewriteRule ^lebenslauf(/)?$ /php/lebenslauf.php

                                Die beiden runden Klammern kannst du glaube ich auch noch weglassen, bin ich mir aber gerade nicht ganz sicher.

                                Eigentlich schon, da das Fragezeichen nur auf ein einziges vor ihm stehendes Zeichen zutrifft, außer es werden eben Klammern eingesetzt.

                                Einen schönen Sonntag noch.

                                Gruß, Ashura

                                --
                                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                                „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                                [HTML Design Constraints: Logical Markup]
                          2. Hi Moped,

                            Aber innerhalb eines VC Containers braucht man den Pfad glaube ich nicht. Bezieht sich doch dann automatisch auf den root.

                            Nein, das stimmt nicht - wenn du einen Directory-Container verwendest, dann musst du da auch den Pfad angeben. Du kannst den Directory-Container _komplett_ weglassen und die Angaben also direkt in VirtualHost reinschreiben, da gilt das AFAIK für den DocumentRoot.

                            [Sun Apr 30 14:50:42 2006] [alert] [client 127.0.0.1] H:/_homepages/hp1/deploy/.htaccess: Options not allowed here
                            127.0.0.1 - - [30/Apr/2006:14:50:42 +0200] "GET /lebenslauf/ HTTP/1.1" 500 625

                            Hänge bei dem was auch immer du jetzt bei AllowOverride geschrieben hast (es sei denn da steht All, aber wenn dem so ist, dann ist irgendwo anders ein Fehler) noch ein Options dran.

                            MfG, Dennis.

                          3. Hallo Moped.

                            Jetzt kommt aber als Fehler:

                            [Sun Apr 30 14:50:42 2006] [alert] [client 127.0.0.1] H:/_homepages/hp1/deploy/.htaccess: Options not allowed here
                            127.0.0.1 - - [30/Apr/2006:14:50:42 +0200] "GET /lebenslauf/ HTTP/1.1" 500 625

                            Ich wüsste nicht warum, aber entferne einmal die Zeile „Options +FollowSymLinks“ in deiner .htaccess-Datei. Dies ist die einzige Options-Direktive in deiner .htaccess-Datei, oder?

                            Einen schönen Sonntag noch.

                            Gruß, Ashura

                            --
                            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                            [HTML Design Constraints: Logical Markup]
          2. Hi Moped,

            <Directory "h:/_homepages">
              Options Indexes FollowSymLinks
              AllowOverride All
              Order allow,deny
              Allow from all
            </Directory>

            Ah ja, das sieht gut aus ;-) Aber AllowOverride All wäre vermutlich gar nicht nötig gewesen und ist u.U. sogar riskant - ich würde dir deshalb empfehlen
              AllowOverride AuthConfig FileInfo Indexes Limit
            zu setzen.

            Nun kommt aber eine fette Fehlermeldung:

            Internal Server Error

            Ein Internal Server Error weist dich stets darauf hin, dass an der Konfiguration des Servers irgendwas nicht stimmt oder ein aufgerufenes CGI-Script einen Fehler zurückgeliefert hat. In deinem Fall wird also irgendwo ein Konfigurationsfehler sein. Gucke dazu jetzt wieder in die error.log Datei und poste uns, was darin steht.

            Testweise kannst du die .htacess Datei auch mal entfernen (also in einen anderen Ordner verschieben oder so) - dann sollte der Internal Server Error nicht mehr auftreten.

            MfG, Dennis.