Apache: Alias + htaccess = 404?
rekire
- webserver
Hi,
Ich habe ein Problemchen mit meinem Apache Server und zwar habe ich einen Alias angelegt in dem eine htaccess Datei ist die alle Anfragen an die index.php weiterleitet. Wenn ich nun auf die Alias URL gehe bekomme ich die Meldung "The requested URL /var/alias/index.php was not found on this server.". Und im Errorlog steht folgendes "File does not exist: /var/www/alias". Ich verstehe nicht warum sich die beiden Meldungen gegenseitig widersprechen.
Auszug aus der Server-Konfiguration:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/
#wozu die nachfolgenden 4 Zeilen eigentlich?
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Alias /alias /var/alias
<Directory /var/alias>
Options Indexes FollowSymLinks
AllowOverride all
Order deny,allow
Deny from all
Allow from 192.168.0.0/255.255.0.0 1.2.3.4
</Directory>
</VirtualHost>
Und meine htaccess Datei:
RewriteEngine on
RewriteCond %{REQUEST_URI} !index.php$ [NC]
RewriteRule .* ./index.php
Wie kann ich das Problem jetzt lösen?
Gruß,
Rekire
Hi,
Ich habe ein Problemchen mit meinem Apache Server
Version?
und zwar habe ich einen Alias angelegt in dem eine htaccess Datei ist die alle Anfragen an die index.php weiterleitet.
An welche index.php - du physisch unterhalb von /var/alias liegende?
Wenn ich nun auf die Alias URL gehe
Das heisst konkret? Welchen URL forderst du an?
bekomme ich die Meldung "The requested URL /var/alias/index.php was not found on this server.". Und im Errorlog steht folgendes "File does not exist: /var/www/alias". Ich verstehe nicht warum sich die beiden Meldungen gegenseitig widersprechen.
Beide sprechen davon, dass etwas gesuchtes nicht vorgefunden wurde. In wie fern stehen sie damit im Widerspruch?
Alias /alias /var/alias
<Directory /var/alias>
Options Indexes FollowSymLinks
Und meine htaccess Datei:
Ebenfalls physisch in /var/alias abgelegt?
RewriteEngine on
RewriteCond %{REQUEST_URI} !index.php$ [NC]
RewriteRule .* ./index.php
>
> Wie kann ich das Problem jetzt lösen?
Ich bin mir nicht sicher, ob ich dir da helfen kann - was den Apachen und seine Konfiguration angeht, gibt's hier groessere Spezis als mich.
Aber zumindest ein paar Punkte, in denen ich bevor dein Problem loesbar wird mehr Erklaerungsbedarf sehe, wollte ich schon mal erwaehnt haben.
MfG ChrisB
hallo ChrisB,
Ich habe ein Problemchen mit meinem Apache Server
Version?
Wäre zwar nett, wenn das angegeben würde, spielt aber in diesem Fall so gut wie keine Rolle, da die Einrichtung von Aliasnamen sowie die Verwendung von .htaccess bereits in ziemlich frühen Apache 1.3.x-Versionen eingeführt wurden und seither immer vorhanden sind.
Viel wichtiger wäre die Frage nach dem verwendeten Betriebssystem gewesen. Na gut, man kann sich ja aus den Pfadangaben zusammenreimen, daß es zumindest _kein_ Windows ist ... ;-)
und zwar habe ich einen Alias angelegt in dem eine htaccess Datei ist die alle Anfragen an die index.php weiterleitet.
An welche index.php - du physisch unterhalb von /var/alias liegende?
.htaccess kann eine URL korrigieren bzw. "umleiten", aber nicht den physischen Ort der tatsächlich vorhandenen Datei ändern. Es geht also um die physisch _innerhalb_ von /var/alias liegende "index.php".
Wenn ich nun auf die Alias URL gehe
Das heisst konkret? Welchen URL forderst du an?
Ein lokaler Aufruf (also unter Umgehung der URL bzw. des Webservers) sollte irgendwelche Inhalte einer als /var/alias/index.php abgelegten Datei anzeigen. Bei einem Aufruf von "http://localhost/alias/index.php" sollte sich dann der von der PHP-Datei generierte Inhalt darstellen bzw. es sollten sich die bereits angegebenen Fehlermeldungen präsentieren.
Grüße aus Berlin
Christoph S.
Hi,
Version?
Wäre zwar nett, wenn das angegeben würde, spielt aber in diesem Fall so gut wie keine Rolle [...]
Alle meine Anmerkungen zielten nur darauf, eventuelle Unklarheiten noch mal klaeren zu lassen.
Aber wenn ausgerechnet du, der du ja sonst bei jedem falsch gesetzten Komma Nachfrage- oder Klaerungsbedarf siehst, mit der Detailtiefe der Angaben des OP diesmal zufrieden warst, is' ja gut.
MfG ChrisB
hallo,
Ich habe ein Problemchen mit meinem Apache Server und zwar habe ich einen Alias angelegt in dem eine htaccess Datei ist die alle Anfragen an die index.php weiterleitet.
Das ist nicht korrekt ausgedrückt. "in einem Alias" kannst du gar nichts an- oder ablegen. Aber in dem Verzeichnis, das dein Apache über den Alias ansprechen können soll, kannst du das sehr wohl.
Wenn ich nun auf die Alias URL gehe bekomme ich die Meldung "The requested URL /var/alias/index.php was not found on this server.". Und im Errorlog steht folgendes "File does not exist: /var/www/alias". Ich verstehe nicht warum sich die beiden Meldungen gegenseitig widersprechen.
Das tun sie ja nicht, sondern sie beschreiben beide exakt dasselbe. Nur: die "Meldung", die du in deinem Browser siehst, kommt unmittelbar vom Apache und berücksichtigt deinen Aliasnamen, die Eintragung im Errorlog beschreibt den physischen Ort, an dem der Fehler auftrat. Also: die erste Meldung ist die über eine nicht auffindbare URL, die zweite Meldung betrifft einen nicht auffindbaren physischen Pfad. Wenn also beide im Grunde genommen dasselbe aussagen, bleibt nur eine Schlußfolgerung übrig: du hast vergessen, so eine Datei "index.php" anzulegen. Oder es stimmt irgendwas am Pfad für dein DocumentRoot nicht (und genau das ist es vermutlich).
#wozu die nachfolgenden 4 Zeilen eigentlich?
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Das ist die "very restrictive" Grundeinstellung für grundsätzlich jeden <Directory>-Container. Deswegen darfst bzw. mußt du in andere <Directory>-Container eben andere Werte reinschreiben, was du ja auch tust:
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Du hast für /var/www/ zwei weitere zusätzliche "Options" angegeben (wobei "FollowSymLinks" überflüssig gewesen wäre, da das ja schon festgelegt ist), du hast für "AllowOverride" den vorgegebenen Wert gegenkorrigiert, und du hast "Order" neu dazugetan.
Übrigens: vergleiche mal bitte
<Directory /var/www/>
mit
<Directory /var/alias>
Fällt dir was auf? Nein? Was ist mit dem "trailing slash" bei "/var/www/"? Gehört der da hin?
Alias /alias /var/alias
Der Alias ist einigermaßen in Ordnung (allerdings solltest du ihn nicht unbedingt selbst wieder "alias" nennen), du könntest höchstens mal schauen, ob es was bringt, noch Anführungszeichen zu verwenden, also
Alias /alias "/var/alias"
Grüße aus Berlin
Christoph S.
Hi Christoph,
erst mal danke das du dir Zeit genommen hast um dich meinem Problem zu widmen.
Vorweg noch ein paar Ergänzungen:
Es geht dabei um ein Debian-Server mit dem Apache 2.2.3
Des Weiteren habe ich die Verzeichnisse hier umbenannt, damit ich nicht die ewig langen Verzeichnisse hier auflisten muss, die wahrscheinlich eh nicht zu der Lösung beitragen.
Der Aufruf der Webseite erfolgte über http://server/alias
Ich habe ein Problemchen mit meinem Apache Server und zwar habe ich einen Alias angelegt in dem eine htaccess Datei ist die alle Anfragen an die index.php weiterleitet.
Das ist nicht korrekt ausgedrückt. "in einem Alias" kannst du gar nichts an- oder ablegen. Aber in dem Verzeichnis, das dein Apache über den Alias ansprechen können soll, kannst du das sehr wohl.
Ok ich wusste jetzt nicht wie ich mich ausdrücken sollte aber das Problem war wie es mir vorkommt dennoch verständlich.
Wenn ich nun auf die Alias URL gehe bekomme ich die Meldung "The requested URL /var/alias/index.php was not found on this server.". Und im Errorlog steht folgendes "File does not exist: /var/www/alias". Ich verstehe nicht warum sich die beiden Meldungen gegenseitig widersprechen.
Das tun sie ja nicht, sondern sie beschreiben beide exakt dasselbe. Nur: die "Meldung", die du in deinem Browser siehst, kommt unmittelbar vom Apache und berücksichtigt deinen Aliasnamen, die Eintragung im Errorlog beschreibt den physischen Ort, an dem der Fehler auftrat. Also: die erste Meldung ist die über eine nicht auffindbare URL, die zweite Meldung betrifft einen nicht auffindbaren physischen Pfad.
Und wieder was gelernt :)
Wenn also beide im Grunde genommen dasselbe aussagen, bleibt nur eine Schlußfolgerung übrig: du hast vergessen, so eine Datei "index.php" anzulegen. Oder es stimmt irgendwas am Pfad für dein DocumentRoot nicht (und genau das ist es vermutlich).
Also die PHP Datei ist bestimmt an der richtigen stelle wenn ich den Script unter http://server/alias/index.php abrufe klappt es sehr wohl.
Das ist die "very restrictive" Grundeinstellung für grundsätzlich jeden <Directory>-Container. Deswegen darfst bzw. mußt du in andere <Directory>-Container eben andere Werte reinschreiben, was du ja auch tust
Aha!
Übrigens: vergleiche mal bitte <Directory /var/www/> mit <Directory /var/alias>
Fällt dir was auf? Nein? Was ist mit dem "trailing slash" bei "/var/www/"? Gehört der da hin?
Nach deiner Fragestellung schließe ich mal auf Nein...
du könntest höchstens mal schauen, ob es was bringt, noch Anführungszeichen zu verwenden
Das klappt leider auch nicht.
Wenn ich manuell auf eine Datei (http://server/alias/index.php) zugreife klappt es ja. Es kommt mir so vor als ob die htaccess Datei was falsch macht.
Gruß,
Rekire
hallo,
Es geht dabei um ein Debian-Server mit dem Apache 2.2.3
Bist du sicher? Apache 2.2.3 war eine Entwicklerversion und stand gewissermaßen "zwischen den Welten". Ich kann diese Version auf keinem einzigen Debian-Server finden, allerdings gibt es sie noch in den Apache-Archiven. Es wäre dir zu empfehlen, eine aktuellere Version über apt einzuspielen.
Aber: wie bereits angegeben, ist die Apache-Version hier nicht so wichtig, da die angegebenen "Probleme", deren Lösung du suchst, auf Techniken beruhen, die der Apache eigentlich seit vielen Jahren "kann" - unabhängig von der Version.
Des Weiteren habe ich die Verzeichnisse hier umbenannt, damit ich nicht die ewig langen Verzeichnisse hier auflisten muss, die wahrscheinlich eh nicht zu der Lösung beitragen.
Doch, genau das wäre schon ziemlich wichtig[1).
Der Aufruf der Webseite erfolgte über http://server/alias
Wenn bei diesem Aufruf nun eben die "index.php", die in diesem Veteichnis liegt, dargestellt werden soll, muß der Server - also Apache - auch wissen, daß sowas auch ohne explizite Angabe des Dateinamens funktionieren muß (sofern er überhaupt mit PHP umgehen kann). Derlei Dinge regelt die Anweisung "DirectoryIndex".
Übrigens: vergleiche mal bitte <Directory /var/www/> mit <Directory /var/alias>
Fällt dir was auf? Nein? Was ist mit dem "trailing slash" bei "/var/www/"? Gehört der da hin?
Nach deiner Fragestellung schließe ich mal auf Nein...
Richtig. Hast du das inzwischen korrigiert?
Wenn ich manuell auf eine Datei (http://server/alias/index.php) zugreife klappt es ja. Es kommt mir so vor als ob die htaccess Datei was falsch macht.
_So_ genau habe ich sie mir nicht angesehen, aber sie ist ja klein genug. Ich tendiere eher zu der Ansicht, daß du mit "DirectoryIndex" irgendwas falsch gemacht hast. Aber es ist sicher kein Fehler, deine .htaccess nochmal gründlich zu testen und eventuell mit anderen Varianten herumzuexperimentieren. Es könnte möglich sein, daß zu zu dem von dir vorgesehenen Zweck gar keine .htaccess brauchst, sondern eben nur der Alias korrekt gesetzt werden muß - da bin ich mir aber nicht ganz sicher. Laß sie einfach mal weg und schau nach, was dann passiert. Es kann ja nix Schlimmeres passieren, als daß du wieder Fehlermeldungen bekommst.
Grüße aus Berlin
Christoph S.
[1]Wenn du Hilfe benötigst, ist es sinnvoll, so wenig wie möglich an den originalen Pfaden etc. zu verändern oder zu verkürzen. Es sei denn, es ginge um "sensible Daten", die wollen wir nun wirklich nicht wissen. Aber es macht schon einen Unterschied, ob ein Webverzeichnis über /var/www oder z.B. über /usr/local/www erreicht werden soll. Und du kannst sicher sein, daß diejenigen, die den Inhalt einer solchen Anfrage wie deiner überhaupt verstehen können, keinerlei Schwierigkeiten haben, unter Umständen auch "sehr lange" Pfadnamen richtig zu lesen. Und bereits aus diesen Pfadnamen Rückschlüsse zu ziehen, welche Distribution du vermutlich einsetzt.