Rewrite-Engine
Tom
- webserver
Hello,
ich habe da ein Problem mit meinem Apachen und der rewrite Engine
Aufruf:
http://testserver/~thomas/php4/Rewrite-Engine/bild_345.jpg
.htaccess:
RewriteEngine on
RewriteRule bild_(\d*).jpg$ get_bild.php?b=$1
Server-Antwort:
Not Found
The requested URL /home/thomas/web/php4/Rewrite-Engine/get_bild.php was not found on this server.
Die Datei 'get_bild.php' ist im Verzeichnis vorhanden und lässt sich auch direkt aufrufen über HTTP
Was mach ich denn da falsch?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Lieber Tom,
RewriteEngine on
RewriteRule bild_(\d*).jpg$ get_bild.php?b=$1
bin mir da auch nicht ganz sicher, aber zwei Ideen habe ich.
1.) Brauchst Du ganz sicher keine RewriteCondition?
2.) Was ist, wenn Du den Pfad zur get_bild.php absolut angibst?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hello Felix,
RewriteEngine on
RewriteRule bild_(\d*).jpg$ get_bild.php?b=$1bin mir da auch nicht ganz sicher, aber zwei Ideen habe ich.
1.) Brauchst Du ganz sicher keine RewriteCondition?
Hab ich bisher für solche einfachen Umleitungen nie benutzt.
Das heißt aber nicht, das man keine braucht.
2.) Was ist, wenn Du den Pfad zur get_bild.php absolut angibst?
Er bemängelt ja das richtige File und es liegt auch dort.
Direkt lässt es sich auch aufrufen.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Tom,
.htaccess:
RewriteEngine on
RewriteBase fehlt. Kann Dir nicht garantieren, dass es daran liegt, würde aber die Fehlermeldung erklären.
Viele Grüße,
Christian
Hello Christian,
.htaccess:
RewriteEngine on
RewriteBase fehlt. Kann Dir nicht garantieren, dass es daran liegt, würde aber die Fehlermeldung erklären.
Schade, dass ist es nicht.
The requested URL /home/thomas/web/php4/Rewrite-Engine/get_bild.php was not found on this server.
Und wenn ich bewusst eine falsche Rewrite-Base einsetze, nimmt er die auch brav in die Fehlermeldung auf. Das File ist für ihn einfach nicht sichtbar. Es gehört aber der richtigen Gruppe an und lesen dürfen ohnehin alle User.
Kann das an der Namensauflösung liegen? Ist ja ein lokaler Server und ich habe keinen DNS laufen dafür. Aber ein direkter Aufruf klappt schließlich auch.
Client und HTTP-Server laufen aber auf zwei getrennten Hosts.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Tom,
Schade, dass ist es nicht.
The requested URL /home/thomas/web/php4/Rewrite-Engine/get_bild.php was not found on this server.
Was steht denn genau im Error-Log?
Kann das an der Namensauflösung liegen?
Nein.
Viele Grüße,
Christian
Hello,
Was steht denn genau im Error-Log?
Access-Log:
192.168.101.44 - - [16/Nov/2007:01:37:18 +0100] "GET /home/thomas/web/php4/Rewrite-Engine/bild_9034.jpg HTTP/1.1" 404 398 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9"
Error-Log:
kein Eintrag zur Sache.
Nun wird es auch ganz verrückt. Ich habe die Ressource zwischendurch direkt aufgerufen, was auch anstandslos funktioniert hat. Danach habe ich den Aufruf (siehe Access-Log) getätigt.
Server-Meldung war diesmal:
Not Found
The requested URL /home/thomas/web/php4/Rewrite-Engine/bild_9034.jpg was not found on this server.
Ich habe das unangenehme Gefühl, dass ich den Server irgendwie abgeschossen habe.
Bei bewusst herbeigeführten Fehlern sind auch Einträge im Error-Log.
In den Meldungen des Servers Richtung Client sind die rewrites durchgeführt, trotzdem 404 und KEIN Eintrag im Error-Log.
Vorletzte Woche lief er noch.
Was tun?
Apt-get remove?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
so langsam komme ich der Sache doch auf die Spur...
[Fri Nov 16 02:09:14 2007] [error] [client 192.168.101.44] File does not exist: /var/www/home
[Fri Nov 16 02:09:22 2007] [error] [client 192.168.101.44] File does not exist: /var/www/home
[Fri Nov 16 02:12:15 2007] [error] [client 192.168.101.44] File does not exist: /var/www/home/thomas
[Fri Nov 16 02:12:18 2007] [error] [client 192.168.101.44] File does not exist: /var/www/home/thomas
[Fri Nov 16 02:14:24 2007] [error] [client 192.168.101.44] File does not exist: /var/www/home/thomas/web
[Fri Nov 16 02:14:27 2007] [error] [client 192.168.101.44] File does not exist: /var/www/home/thomas/web
[Fri Nov 16 02:17:06 2007] [error] [client 192.168.101.44] script '/var/www/home/thomas/web/php4/Rewrite-Engine/get_bild.php' not found or unable to stat
[Fri Nov 16 02:17:08 2007] [error] [client 192.168.101.44] script '/var/www/home/thomas/web/php4/Rewrite-Engine/get_bild.php' not found or unable to stat
Der Bursche sucht das Rewrite-File nicht im User-Verzeichnis, sondern in einem entsprechenden Unterverzeichnis der Server-Root
Ich habe den Pfad nun so nach und nach angelegt, und nun funktioniert es.
Da besteht dann aber eine Fehlkonfiguration mit den User-Home-Verzeichnissen.
Habe ich mich neulich schon dämlich nach gesucht, wo die eingestellt werden müssen.
Aber wieso meldet der Server dem Client den vermeintlich richtigen Pfad für die umgeschriebene Suche, sucht aber selber unter seiner Server-Root danach?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Lieber Tom,
Der Bursche sucht das Rewrite-File nicht im User-Verzeichnis, sondern in einem entsprechenden Unterverzeichnis der Server-Root
also dann doch
2.) Was ist, wenn Du den Pfad zur get_bild.php absolut angibst?
oder nicht?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hello,
Das modul Userdir ist geladen und seine Konfigurationsdatei auch.
<IfModule mod_userdir.c>
UserDir web
UserDir disabled root
<Directory /home/*/web>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
IndexOptions +NameWidth=* +FoldersFirst +IgnoreCase
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
</IfModule>
Braucht das Modul Rewrite keine Konfigurationsdatei?
Wo liegt nun nun der Fehler?
Es ist gleichgültig, ob ich für die Substituierung in der Rewrite-Rule ein vollen Pfad angegebe, die Datei wird immer in der Server-Root gesucht
[Fri Nov 16 02:53:29 2007] [error] [client 192.168.101.44] script '/var/www/home/thomas/web/php4/Rewrite-Engine/get_bild2.php' not found or unable to stat
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Lieber Tom,
vielleicht irre ich mich ja, aber was passiert mit einer solchen Einstellung?
RewriteEngine on
RewriteRule bild_(\d*).jpg$ /php4/Rewrite-Engine/get_bild.php?b=$1
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hello Felix,
vielleicht irre ich mich ja, aber was passiert mit einer solchen Einstellung?
RewriteEngine on
RewriteRule bild_(\d*).jpg$ /php4/Rewrite-Engine/get_bild.php?b=$1
Da sucht er dann auch in /var/www
[Fri Nov 16 03:11:12 2007] [error] [client 192.168.101.44] File does not exist: /var/www/php4
also der Document Root des (Haupt-)Servers
Ich habe noch keine Virt Hosts auf diesem hier eingerichtet.
Das macht er übrigens auch, wenn ich einen vollständigen Pfad angebe. Dann hängt er den einfach hinter die Document Root des Servers.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
ich habe es jetzt so hingeschmuddelt...
testserver:/var/www# ls -la
insgesamt 0
drwxr-xr-x 3 root root 128 2007-11-16 03:40 .
drwxr-xr-x 14 root root 336 2007-04-14 15:22 ..
lrwxrwxrwx 1 root root 24 2007-04-14 15:22 analog -> /usr/share/analog/images
drwxr-xr-x 2 root root 312 2007-11-16 01:49 apache2-default
lrwxrwxrwx 1 root root 6 2007-11-16 03:40 home -> /home/
Einfach einen Link in /var/www/ für 'home' auf /home/ gelegt.
Nun tut's für alle User.
Ich kann mir aber nicht vorstellen, dass dieses Verhalten normal ist.
Entweder, ich habe etwas vergessen einzustellen, oder das Ding hat 'ne Macke. Aber _das_ müsste ja schon mal jemand gemerkt haben...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hi Tom,
Das macht er übrigens auch, wenn ich einen vollständigen Pfad angebe. Dann hängt er den einfach hinter die Document Root des Servers.
Natürlich, schon mal den Manual-Eintrag zu RewriteBase gelesen? *fg*
Description: Sets the base URL for per-directory rewrites
Syntax: RewriteBase URL-path
Da ist von einem URL-Path die Rede und nicht von einem Pfad im Filesystem. Wenn du also
RewriteBase /home/thomas/pub/php4/Rewrite-Engine/
angibst, dann schreibt er alle Ziel-URLs um nach
http://<Host>/<RewriteBase>/<RewriteRule>
http://thomas-host.invalid/home/thomas/pub/php4/Rewrite-Engine/get_file.php
Letzteres dann als konkretes Beispiel. ;-) Dieses Ziel wird dann wie ein neuer Request behandelt und natürlich als Pfad im DocumentRoot /var/www nicht gefunden.
Probier also mal folgendes:
RewriteBase /~thomas/php4/Rewrite-Engine/
Sollte dann eigentlich funktionieren… ;-)
Viele Grüße,
~ Dennis.
Hello Dennis,
Da ist von einem URL-Path die Rede und nicht von einem Pfad im Filesystem. Wenn du also
RewriteBase /home/thomas/pub/php4/Rewrite-Engine/
angibst, dann schreibt er alle Ziel-URLs um nach
http://<Host>/<RewriteBase>/<RewriteRule>
http://thomas-host.invalid/home/thomas/pub/php4/Rewrite-Engine/get_file.phpLetzteres dann als konkretes Beispiel. ;-) Dieses Ziel wird dann wie ein neuer Request behandelt und natürlich als Pfad im DocumentRoot /var/www nicht gefunden.
Probier also mal folgendes:
RewriteBase /~thomas/php4/Rewrite-Engine/
Sollte dann eigentlich funktionieren… ;-)
Werde ich nachher gleich testen.
Dass es auf der vorigen Installation ohne Rewrite Base ging, liegt vermutlich daran, dass dort jeder User einen eigenen Virt Host hatte. Das würde es erklärlich machen. Aber erst einmal abwarten, was die Gurke nachher sagt dazu.
Danke Dir jedenfalls schon mal für den Tipp
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Dennis,
Das macht er übrigens auch, wenn ich einen vollständigen Pfad angebe. Dann hängt er den einfach hinter die Document Root des Servers.
Natürlich, schon mal den Manual-Eintrag zu RewriteBase gelesen? *fg*
Ich hab's ja gesagt. *scnr*
Viele Grüße,
Christian
Hello,
Das macht er übrigens auch, wenn ich einen vollständigen Pfad angebe. Dann hängt er den einfach hinter die Document Root des Servers.
Natürlich, schon mal den Manual-Eintrag zu RewriteBase gelesen? *fg*
Ich hab's ja gesagt. *scnr*
amüsiert Ihr Euch man...
Ich kann's im Moment ja noch nicht einmal ausprobieren :-(
Der Host ist noch beschäftigt.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello Dennis,
Description: Sets the base URL for per-directory rewrites
Syntax: RewriteBase URL-pathDa ist von einem URL-Path die Rede und nicht von einem Pfad im Filesystem. Wenn du also
RewriteBase /home/thomas/pub/php4/Rewrite-Engine/
angibst, dann schreibt er alle Ziel-URLs um nach
http://<Host>/<RewriteBase>/<RewriteRule>
http://thomas-host.invalid/home/thomas/pub/php4/Rewrite-Engine/get_file.phpLetzteres dann als konkretes Beispiel. ;-) Dieses Ziel wird dann wie ein neuer Request behandelt und natürlich als Pfad im DocumentRoot /var/www nicht gefunden.
Probier also mal folgendes:
RewriteBase /~thomas/php4/Rewrite-Engine/
Und so ist es auch richtig.
Bin endlich dazu gekommen, die ganzen rewrites in den User-Verzeichnissen vorzubereiten.
Nachdem der Server heute, nachdem ich ihn über Nacht neu aufgestzt hatte und auch die Daten schon herunter hatte von der Platte mit dem "kaputten" Kernel, nochmal in die Kernel Panic gelaufen war...
*Schock*.
Aber das lag daran, dass die alte Platte ja auch drinsteckte, und wohl einen Moment eher bereit war, als die neue. Das BIOS ist so blöd, dass es dann trot Einstellung "Booten von HDD0" von HDD1 booten will.
Ich muss nun also sehen, dass ich die Bootpartion auf der Platte wieder loswerde. Wie deinstalliert man grub?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hi Tom,
Aber das lag daran, dass die alte Platte ja auch drinsteckte, und wohl einen Moment eher bereit war, als die neue. Das BIOS ist so blöd, dass es dann trot Einstellung "Booten von HDD0" von HDD1 booten will.
Vielleicht irgendein Code im MBR von HDD0, welcher ein Botten von HDD1 erzwingt? Ich kenne mich da allerdings nicht aus, dass ist mir zu Low-Level ;-)
Ich muss nun also sehen, dass ich die Bootpartion auf der Platte wieder loswerde. Wie deinstalliert man grub?
Warum willst du ihn deinstallieren? Du brauchst eigentlich immer einen Boat-Loader... Und wenn du dein System bzw. die Hardware deines Systems geändert hast, dann sollte es im Normalfall reichen, wenn du grub einmal neu laufen lässt. Dadurch sollte sich der Boat-Loader neu "installieren", also in den MBR oder sonstwohin schreiben.
Viele Grüße,
~ Dennis.
Hello Dennis,
Ich muss nun also sehen, dass ich die Bootpartion auf der Platte wieder loswerde. Wie deinstalliert man grub?
Warum willst du ihn deinstallieren? Du brauchst eigentlich immer einen Boat-Loader... Und wenn du dein System bzw. die Hardware deines Systems geändert hast, dann sollte es im Normalfall reichen, wenn du grub einmal neu laufen lässt. Dadurch sollte sich der Boat-Loader neu "installieren", also in den MBR oder sonstwohin schreiben.
Ich will ihn ja nicht auf der Boot-Platte beseitigen, sondern auf derjenigen, die nur noch als Datenplatte benutzt wird. Da benötige ich kein grub mehr. Was nicht mehr da ist, kann nicht mehr reagieren.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom