Edgar Ehritt: mod_rewrite subfolder problem

Beitrag lesen

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 on

queries 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]

  • gilt für http://domain.tld/verzeichnis/
    Rieft man http://domain.tld/ auf, wurde vorher der Request zu http://domain.tld/homepage/ umgeschrieben. Jetzt wird daraus http://domain.tld/homepage.php

RewriteRule ^([^/]*)/([A-Za-z]*)/$ $1.php?folder=$2 [L]

  • gilt für http://domain.tld/verzeichnis/verzeichnis/
    Rieft man http://domain.tld/verzeichnis/ auf, wurde vorher der Request zu http://domain.tld/homepage/verzeichnis/ umgeschrieben. Jetzt wird daraus http://domain.tld/homepage/verzeichnis.php

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

--
Was haben wir denn heute? "Kampf der Titanen" - Aha! Es treten an 0 und 1.