mod_rewrite geht nicht
Kuftel
- webserver
Hallo Forum,
Ich hoffe es kann mir jemand helfen. Habe schon alles versucht und bin mit meinem Latein am Ende.
Laut phpinfo läuft mod_rewrite. Die rewrite log ist leider leer.
Ich habe in der httpd.conf folgendes:
RewriteEngine on
RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 3
RewriteRule /veranstaltung/.*$ /rewrite.php
Um auszuschliessen, das es an der RewriteRule liegen kann hatte ich auch kurzzeitig folgendes probiert:
RewriteRule .* /index.php
Leider bekomme ich immer nur 404 Fehlermeldung.
In der Apache error.log steht:
File does not exist: /var/www/veranstaltung, referer: http://localhost/html/veranstaltungen0.html
Ich denke, das die Regel nicht angezogen wird.
Kann mir jemand helfen, warum das sein kein?
Vielen Dank schonmal!
echo $begrüßung;
Ich habe in der httpd.conf folgendes:
RewriteEngine on
RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 3
Die RewriteEngine solltest du erst dann anschalten, wenn du das Umschreiben beötigst. Für das setzen des RewriteLog ist da noch nicht notwendig. Notwendig ist aber nach einer Konfigurationsänderung ein Neu-Laden der Konfigurationsdatei. Das passiert beispielsweise beim Programmstart.
Die rewrite log ist leider leer.
Sollte nicht vorkommen, wenn die Konfiguration aktiviert ist.
Kann mir jemand helfen, warum das sein kein?
Außer vergessenem Konfiguration-Neu-Laden fällt mir grad erstmal nichts ein.
echo "$verabschiedung $name";
Hallo!
Danke für die schnelle Hilfe.
Deinen Tip mit der Reihenfolge habe ich umgesetzt. (ohne Veränderung)
Wenn Du mit konfiguration neu laden zum Beispiel ein neustarten des Apache meinst, das habe ich natürlich gemacht.
Hi Kuftel,
Laut phpinfo läuft mod_rewrite. Die rewrite log ist leider leer.
Hat der Apache Schreibrechte für das rewrite_log? Falls du die Datei von Hand angelegt hast, könnte es nämlich sein, dass dies nicht der Fall ist.
Viele Grüße,
~ Dennis.
Hallo und vielen Dank,
Hat der Apache Schreibrechte für das rewrite_log? Falls du die Datei von Hand angelegt hast, könnte es nämlich sein, dass dies nicht der Fall ist.
die Logfile wurde vom Apache selbst erstellt.
Ich habe die Rechte mal zum Testen auf ugo+rwx gesetzt. Lieder mit keinem Erfolg.
echo $begrüßung;
Ich habe die Rechte mal zum Testen auf ugo+rwx gesetzt. Lieder mit keinem Erfolg.
Zum einen kann man ugo mit a abkürzen, zum anderen ist es (mindestens) sinnfrei, das Execute-Bit für anderes außer Verzeichnissen und direkt ausführbaren Dateien zu setzen.
Wenn sich das Error-Log zum Thema RewriteLog-Datei-Anlegen/Beschreiben ausschweigt, dann kann ich mir nur vorstellen, dass die RewriteRule-Direktiven ignoriert werden. Ist AllowOverride FileInfo für das Verzeichnis gesetzt? Wird die Konfiguration für das Verzeichnis überhaupt abgearbeitet? Syntax-Fehler einbauen sollte einen 500er ergeben. Wenn nicht, schau nach, warum sie ignoriert wird.
echo "$verabschiedung $name";
das mit dem chmod war einfach nur schnell und effektiv. will mir jetzt nicht noch gedanken darüber machen.
Das AllowOverride hatte noch gefehlt. Leider keine Besserung nach einfügen von:
<Directory "/var/www">
AllowOverride FileInfo
</Directory>
in httpd.conf und restart
Das dir RewriteRule-Direktiven ignoriert werden ist auch meine Vermutung! Aber warum!
Die Konfiguration sollte abgearbeitet werden, da Änderungen wie der Pfad der rewrite log durchschlagen.
echo $begrüßung;
Das dir RewriteRule-Direktiven ignoriert werden ist auch meine Vermutung! Aber warum!
Warum gehst du nicht auf meinen anderen Vorschlag ein, das Abarbeiten durch einen gezielt eingebauten Fehler zu prüfen? Hast du im ErrorLog nachgesehen, ob dort noch was zum RewriteLog drinsteht?
Du gibt zu wenig Informationen, um die gesamte Konfiguration nachvollziehen zu könnnen. Versuch doch nochmal genau zu beschreiben, an welcher Stelle du welche Konfiguration vorgenommen hast.
Die Konfiguration sollte abgearbeitet werden, da Änderungen wie der Pfad der rewrite log durchschlagen.
Spekuliere nicht, überprüfe es!
echo "$verabschiedung $name";
Ok!
Also alles was ich gemacht habe nach der installation ist das anpassen der httpd.conf das sie wie folgt aussieht:
ServerName foobar
<Directory "/var/www">
AllowOverride FileInfo
</Directory>
RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 3
RewriteEngine on
RewriteRule /veranstaltung/.*$ /rewrite.php
Diese war vorher leer. Ich weis nicht wo ich fehler einbauen soll, da Syntaxfehler in dieser Datei durch einen nichtstarten des Apache schnell ausgebremst werden.
Meine Apache error log enthält nach einem restart und dem Aufruf folgendes:
[Tue May 20 14:39:17 2008] [notice] caught SIGWINCH, shutting down gracefully
[Tue May 20 14:39:28 2008] [notice] Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6.3 configured -- resuming normal operations
[Tue May 20 14:39:33 2008] [error] [client 127.0.0.1] File does not exist: /var/www/veranstaltung, referer: http://localhost/html/veranstaltungen0.html
Wenn noch Informationen fehlen bitte melden!
echo $begrüßung;
Also alles was ich gemacht habe nach der installation ist das anpassen der httpd.conf [...]
Diese war vorher leer. Ich weis nicht wo ich fehler einbauen soll, da Syntaxfehler in dieser Datei durch einen nichtstarten des Apache schnell ausgebremst werden.
Gut, ich nahm an, dass du die Umschreibung in einem .htaccess-Kontext vornehmen wolltest. Dafür wäre der AllowOverride notwendig gewesen. An der Stelle ist auch nur die Überprüfung, ob die .htaccess überhaupt beachtet wird durch den Einbau eines Fehlers sinnvoll. Konfigurationen der Hauptdatei wirken ja immer.
RewriteRule /veranstaltung/.*$ /rewrite.php
[Tue May 20 14:39:33 2008] [error] [client 127.0.0.1] File does not exist: /var/www/veranstaltung, referer: http://localhost/html/veranstaltungen0.html
Es sei denn, die Regel passt nicht auf die angeforderte Ressource. "veranstaltung" entspricht nicht "veranstaltung"-gefolgt-von-Schrägstrich-und-keinem-oder-beliebig-vielen-Zeichen.
Mich wundert, dass das RewriteLog schweigt und nicht mal erzählt, dass die Regel nicht passt. Vielleicht macht es das nur bei noch höherem RewriteLogLevel als 3. Versuch es mal mit 9. Das ist das höchste. Leider fand ich beim kurzen Suchen kein Dokument, das aufführt, was in welcher Stufe gelogt wird.
echo "$verabschiedung $name";
Vielen dank,
Ich habe aber schon geschrieben,das ich auch folgende Rule getestet hatte:
RewriteRule .* /index.php
Diese müßte ja auf alles zutreffen.
Selbst das funktioniert nicht.
Auch ein erhöhen des loglevel auf 9 erbrachte keinen weiteren Erkenntnise.
Ausserdem fordere ich folgende Datei an.
http://localhost/veranstaltung/5_Tage_132.html
Sollte also (meinen bescheidenen Regex kenntnissen nach) auch passen.
Hi Kuftel,
Auch ein erhöhen des loglevel auf 9 erbrachte keinen weiteren Erkenntnise.
Mal ein paar andere Sachen. Nach einen Pfadangaben zu urteilen, hast du dir Apache auf einem Linux-System installiert. Welches Linux? Und wie hast du dir den Apache installiert? Man kann sich das nämlich meist über einen Packet-Manager installieren, oder selber kompilen.
Als nächstes sprichst du immer von einer httpd.conf Datei. Wenn man Apache2 verwendet, heißt die Konfigurationsdatei aber bei den mir bekannten Linux-Systemen stets apache2.conf. Bist du sicher, dass du die richtige Konfigurationsdatei bearbeitest? Prüfe es, indem du gezielt etwas falsches notierst und versuchst den Apache damit neuzustarten.
Eine andere Idee die ich noch habe: Wo hast du die RewriteRules definiert? In der Main Server Configuration, oder in einer VirtualHost Configuration? Die mir bekannten Linux-Systeme legen dir immer bereits einen Default-VirtualHost an (z.B. /etc/apache2/sites-available/default), sodass immer dieser zum Einsatz kommt und der Main-Server gar keine Anfragen mehr beantwortet. Insofern könnte es auch sein, dass du die Regel einfach an der falschen Stelle notiert hast. Hast du geprüft, ob überhaupt irgendwelche Konfigurationen eine Auswirkung haben? Mein Favorit für solche Tests ist immer „Deny from All” ;-)
Viele Grüße,
~ Dennis.
Hallo!
Ja ist ein Ubuntu Linux, habe apache2 mit apt installiert.
Httpd.conf wird in der apache2.conf angezogen. Änderungen wirken sich aus.
RewriteRules sind in dieser Datei!
mod_rewrite ist laut phpinfo aktiv.
Danke für den Tip mit den Virtual Hosts. Die Datei
/etc/apache2/sites-available/default existiert, habe meine Änderungen nun von der httpd.conf in diese Datei umgezogen. Leider mit keinem Ergebnis! Ich kann aber mit sicherheit sagen, das die Datei angezogen wird. Das Deny all funktioniert wunderbar. ;-)
Es hat sich etwas getan! Nach dem ich die Einstellungen in der /etc/apache2/sites-available/default gemacht habe tut jetzt zumindest das logging.
In der apache2 error.log kommt nun folgendes zum vorschein: (22)Invalid argument: apr_global_mutex_unlock(rewrite_log_lock) failed
und in der rewrite.log steht leider nur ein:
pass through /veranstaltung/5_Tage_132.html
Was vermutlich mir mal soviel zu sagen hat, das meine Regel wieder nicht greift.
Aber ich bin a bisle weiter.
Ich werde noch verrückt wegen dem rewrite!!!
Warum greift diese Regel nicht?
RewriteRule .* /foo.php
Diese steht an einer Stelle die ausgeführt wird in der /etc/apache2/sites-available/default
(getested durch deny from all)
In der rewrite.log steht:
127.0.0.1 - - [21/May/2008:11:56:04 +0200] [localhost/sid#80b4168][rid#8340160/initial] (2) init rewrite engine with requested uri /test.php
127.0.0.1 - - [21/May/2008:11:56:04 +0200] [localhost/sid#80b4168][rid#8340160/initial] (1) pass through /test.php
Kann mir jemand auf der Suche nach dem Fehler helfen?
Gibt es irgendwelche Standardeinstellungen die meiner Regel entgegesprechen würden?
Ist meine regel noch nicht allgemeingültig genug?
Danke
Hi Kuftel,
Warum greift diese Regel nicht?
RewriteRule .* /foo.php
Hast du ein
RewriteEngine On
darüber stehen?
Viele Grüße,
~ Dennis.