mod_rewrite subfolder problem
sokeking
- webserver
Hallo zusammen,
ich habe hier ein Problem, bei welchem ich echt nicht mehr weiter weiß und bislang nichts hilfreiches im Netz finden konnte. Ich hoffe, ihr könnt mir weiterhelfen.
Um eine Homepage, die ich betreue, Suchmaschinen- sowie Adminfreundlich zu machen, habe ich angefangen mit der mod_rewrite rumzuspielen, die auch auf dem Server aktiv ist und in gewissem Maße funktioniert. Vorab: die vorgenommenen Einstellungen funktionieren auf meinem Apache Server wunderbar.
Geschehen soll folgendes:
im Root soll eine htaccess die url insofern überschreiben, als dass die Anfrage in eine Unterordner 'homepage' umgeleitet wird. In diesem Subfolder ist eine weitere htaccess, die dann die homepagespezifischen RewriteRules definiert. Die Files sehen so aus:
############## FILE OBERORDNER #############
# enable mod_rewrite
Options +FollowSymLinks
RewriteEngine on
# queries containing board are excepted by the rewrites
RewriteRule board/$ board/index.php [L]
RewriteRule ^board/(.*) board/$1 [L]
# rewrite everthing else with the subfolder of the homepage
RewriteRule ^$|^(.*) homepage/$1
############## FILE SUBORDNER #############
# enable mod_rewrite
Options +FollowSymLinks
RewriteEngine on
# if there is just the host url, rewrite to index.php
RewriteRule ^$ index.php [L]
# Graceful E-Mail Obfuscation Mod - replace faux folder, if javascript is off
RewriteRule ^contact/([A-Za-z0-9._%-]*)\+([A-Za-z0-9._%-]*)\+([A-Za-z.]{2,4})/$ contact.php?folder=form&n=$1&d=$2&t=$3 [L]
# other rewrites for the access to the homepage. if the request is a real folder or file, do not rewrite anything
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/$ $1\.php [L]
RewriteRule ^([^/]*)/([A-Za-z]*)/$ $1\.php?folder=$2 [L]
RewriteRule ^press/view/([0-9]*)/$ press\.php?folder=view&pid=$1 [L]
RewriteRule ^press/download/images/$ press\.php?folder=download&sub=images [L]
RewriteRule ^([^/]*)/([A-Za-z]*)/([0-9]*)/$ $1\.php?folder=$2&page=$3 [L]
###################################
Dabei soll folgendes passieren:
http://www.xyz.de/ -> http://www.xyz.de/homepage/index.php
http://www.xyz.de/abc/ -> http://www.xyz.de/homepage/abc.php
...
Das Problem ist, dass der Server von All-inkl.com das nicht wirklich machen will. Die erste Rule funktioniert. Aber bei der zweiten kommt ein 404 Fehler:
"The requested URL /homepage/redirect:/homepage/abc.html// was not found on this server."
Was aber auch funktioniert ist:
http://www.xyz.de/homepage/abc/ -> http://www.xyz.de/homepage/abc.php
Hi,
Das Problem ist, dass der Server von All-inkl.com das nicht wirklich machen will. Die erste Rule funktioniert. Aber bei der zweiten kommt ein 404 Fehler:
"The requested URL /homepage/redirect:/homepage/abc.html// was not found on this server."
Gut, aber das ist nur, was der Client davon zu sehen bekommt - interessanter dürften aber die Logs des Servers sein - Access-, ggf. Error- und auf jeden Fall Rewrite-Log. Da sich letzteres nur in der zentralen Serverkonfiguration einschalten lässt, wirst du dir im Zweifelsfalle einen lokalen Testserver aufsetzen müssen, um das Problem genauer analysieren zu können.
MfG ChrisB
Hi Chris,
stimmt, so eine Log wäre schon nicht schlecht. Aber lokal bei mir auf dem Apache läuft ja alles problemlos - das ist ja gerade das kuriose :-/
Grüße,
Soke
Hi,
stimmt, so eine Log wäre schon nicht schlecht. Aber lokal bei mir auf dem Apache läuft ja alles problemlos - das ist ja gerade das kuriose :-/
Nun, man sollte versuchen, sein Testsystem so weit wie möglich dem Produktivsystem anzugleichen - aber das ist eben nicht immer vollständig möglich, fängt oftmals schon mit unterschiedlichem OS an.
Und daraus ergibt sich dann auch teilweise unterschiedliches Verhalten zweier solcher Systeme.
Wenn an deinem Vorgehen erst mal nichts formal fehlerhaft ist, und dafür spricht ja, dass es auf dem lokalen Testsystem wie gewünscht funktioniert - dann braucht es meistens einen Blick in die Logs des Systems, auf dem es nicht funktioniert. Kannst ja bei deinem Provider mal anfragen, ob er dir da weiterhelfen kann.
MfG ChrisB
Huhu,
ich hatte gestern mit meinem Provider telefoniert und bin mittlerweile total angepisst. Angeblich wär da nix und es sei außerhalb ihres Services. Ich bin mit ziemlich sicher, dass die irgend ne Art RewriteRule eins oben drüber haben oder so. So dass nicht existierende Ordner direkt super kompliziert umgeschrieben werden.
Danke trotzdem. Viele Grüße,
Soke
Hi,
ich weiß mittlerweile wieder ein wenig mehr. Bisher geschah ja folgendes:
http://www.xyz.de/abc/ -> http://www.xyz.de/homepage/abc.html//
statt
http://www.xyz.de/abc/ -> http://www.xyz.de/homepage/abc.php
Wenn ich nun im Root-Verzeichnis die abc.html, die noch von der urspünglichen, statischen Version der Homepage übrig war, wegmache - wird es noch kurioser:
http://www.xyz.de/abc/ -> http://www.xyz.de/abc/
Die RewriteRule, die die ganze Zeit etwas diversifiziert 'funktionierte', fittet nun garnicht mehr bzw. nur noch genau dann, wenn die Datei oder das Verzeichnis auch existieren, wie beispielsweise der stylingkram.
RewriteRule ^$|^(.*) homepage/$1
Ich bin sowas von ratlos :-/
Hallo Sokeking,
Geschehen soll folgendes:
im Root soll eine htaccess die url insofern überschreiben, als dass die Anfrage in eine Unterordner 'homepage' umgeleitet wird. In diesem Subfolder ist eine weitere htaccess, die dann die homepagespezifischen RewriteRules definiert. Die Files sehen so aus:enable mod_rewrite
Options +FollowSymLinks
RewriteEngine onqueries containing board are excepted by the rewrites
RewriteRule board/$ board/index.php [L]
Dafür gibt es DirectoryIndex
RewriteRule ^board/(.*) board/$1 [L]
Diese Regel regelt nichts. Sie schickt Anfagen an Pfad board/abc an board/abc weiter. Eine Filterung für RewriteRule sollte RewriteCond sein!
rewrite everthing else with the subfolder of the homepage
RewriteRule ^$|^(.*) homepage/$1
hm ...
############## FILE OBERORDNER #############
Options +FollowSymLinks
DirectoryIndex index.htm index.html index.xhtml index.php
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/board/.*
RewriteRule (.*) homepage/$1 [L]
###################################
Dabei soll folgendes passieren:
http://www.xyz.de/ -> http://www.xyz.de/homepage/index.php
Das ist weniger sinnig. http://www.xyz.de/homepage/index.php sollten zu http://www.xyz.de/homepage/ analog gesehen werden. So zumindest ist das gewöhnliche Verhalten des Apachen. Daher habe oben DirectoryIndex verwendet.
http://www.xyz.de/abc/ -> http://www.xyz.de/homepage/abc.php
Sieh Dir doch mal Deine Rewrite-Regeln des Unterverzeichnisses an:
RewriteRule ^([^/]*)/$ $1.php [L]
RewriteRule ^([^/]*)/([A-Za-z]*)/$ $1.php?folder=$2 [L]
RewriteRule ^press/view/([0-9]*)/$ press.php?folder=view&pid=$1 [L]
RewriteRule ^press/download/images/$ press.php?folder=download&sub=images [L]
Diese Regeln werden nie greifen. Die Basis ist /homepage/presse/etc.
RewriteRule ^([^/]*)/([A-Za-z]*)/([0-9]*)/$ $1.php?folder=$2&page=$3 [L]
Diese Regel bewirkt ebenfalls ein Umschreiben auf http://domain.tld/homepage.php + query string
Das Problem ist, dass der Server von All-inkl.com das nicht wirklich machen will. Die erste Rule funktioniert. Aber bei der zweiten kommt ein 404 Fehler:
"The requested URL /homepage/redirect:/homepage/abc.html// was not found on this server."Was aber auch funktioniert ist:
http://www.xyz.de/homepage/abc/ -> http://www.xyz.de/homepage/abc.php
############## FILE SUBORDNER #############
RewriteEngine on
RewriteRule ^/homepage/contact/([A-Za-z0-9._%-]*)\+([A-Za-z0-9._%-]*)\+([A-Za-z.]{2,4})/$ /homepage/contact.php?folder=form&n=$1&d=$2&t=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/homepage/([^/]*)/$ /homepage/$1.php [L]
RewriteRule ^/homepage/press/view/([0-9]*)/$ /homepage/press.php?folder=view&pid=$1 [L]
RewriteRule ^/homepage/press/download/images/$ /homepage/press.php?folder=download&sub=images [L]
RewriteRule ^/homepage/([^/]*)/([^/]*)/$ /homepage/$1.php?folder=$2 [L]
RewriteRule ^/homepage/([^/]*)/([^/]*)/([^/]*)/$ /homepage/$1.php?folder=$2&page=$3 [L]
###################################
Gruß aus Berlin!
eddi
Hallo Eddy,
danke für Deine Bemühungen und die ausführliche Antwort! Ich habe deine Vorschläge soeben ausprobiert, sie funktionieren allerdings nicht. Das Verhalten verändert sich allerdings keines wegs.
Dass die /hompage/ sache wieder umgeschrieben wird, scheint nicht ganz richtig zu sein, da es auf meinem Localhost ja funktioniert :-(
Viele Grüße,
Benni
Hallo noch einmal,
hab den Fehler gefunden und ich könnte mich darüber schwarzärgern, da ich mich daran nun wieder ewig aufgehalten habe. Es lag weder an den Rules, noch am Provider:
Options +FollowSymLinks
Das Plus war der Fehler. Keine Ahnung wo ich diese Syntax im Netz gefunden hatte - sie stammt auf jeden Fall davon ^^.
Trotzdem vielen Dank für die Bemühungen.
Viele Grüße,
Soke