ULR rewrite
Moped
- webserver
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.
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.
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>
[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
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.
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.
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.
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
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?
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
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
Großgeschrieben:
RewriteEngine on
ergibt leider den gleichen Fehler. Daran kann es also nicht liegen.
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]
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
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.
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
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
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>
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
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
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?
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.
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
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.
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
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.