Aufruf von Modulen klappt nicht

Wipeout

Erfahrenes Mitglied
Hallo Community,

ich habe folgendes Problem, ich habe bis dato immer meine Webseite mit http://www.meinedomain.de/index.php?seite=foo aufgerufen.
So weit so gut dafür habe ich folgendes Script in meine index.php aufgerufen.

PHP:
                        $error = false;
                            if( empty($_GET['modul']))
                                {
                                $_GET['modul'] = '/news';
                                }
/*                            elseif (empty($_GET['action']))
                                {
                                $_GET['action'] = '';
                                }
*/                            if( strpos($_GET['modul'], '..') !== false )
                                {
                                $error = true;
                                }
                            if( !$error && ($absPath = realpath('php/'.$_GET['modul'].'/index.php')) !== false )
                                {
                                include($absPath);
                                } else {
                                    test_var($absPath);
                                include('fehler/error.php');
                                         }

Das klappt auch einwandfrei etc.
Jetzt wollte ich mich mal ein bisschen mit SEO und so beschäftigen damit ich meine seite dann auch aufrufen kann mit http://www.meinedomain.de/foo.
Das klappt mit obigem Script auch sehr gut. Wen ich jetzt aber etwas in mein Gästebuch eintragen möchte, dann möchte ich das er beim abschicken folgenden Link aufruft

http://www.meinedomain.de/gaestebuch/eintragen

meine ordner struktur sieht so aus
index.php
--php
-----gaestebuch
--------index.php

also ich habe im ordner gaestebuch eine index.php liegen auf die er zugreifen soll.

Jetzt habe ich mit .htaccess dank euch mir folgendes zusammen gestrickt

Code:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?modul=$1 [NC]
RewriteRule ^(.*)/(.*)$ index.php?modul=$1&action=$2 [NC]
RewriteRule ^(.*)/seite/(.*)$ index.php?modul=$1&action=$2 [NC,L]

und schon wird keine script mehr gefunden und die css wird auch nicht mehr angewendet.
wen ich jetzt

Code:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?modul=$1 [NC]
RewriteRule ^(.*)/seite/(.*)$ index.php?modul=$1&action=$2 [NC,L]

in die .htaccess eintrage werden zumindestens die haupt scripte wieder gestartet. Aber die action wird grundlegend übersprungen.
Ein var_dump() hat ergeben das wen ich nur das modul aufrufe alles wunderbar klappt ich es steht also in $_GET['modul'] das passende Modul drin, wen ich jetzt eine action aufrufe, dann wird das modul mit index.php überschrieben aber in action steht die richtige aktion drin die aufgerufen werden soll.

Die frage ist jetzt wie kriege ich das raus.
also das in $_GET['modul'] auch wirklich das modul steht
und auch gleichzeitig in $_GET['action'] auch die aktion steht ?
Bzw muss ich was an meinem Php script ändern ****?

Ich hoffe ich habe mich verständlich ausgedrückt und Ihr könnt mir irgendwie helfen, weil solangsam verzweifel ich hier ;)
 
Du hast als ersten Eintrag
RewriteRule ^(.*)$ index.php?modul=$1 [NC]

Das leitet alles weiter. Die folgenden Rules kommen nicht mehr zum Zuge. Diese Zeile solltest du darum als letzte haben.
 
Hallo Yaslaw ;)

Also habe deinen Rat befolgt und habe meine .htaccess nun so geändert

Code:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?modul=$1&action=$2 [NC]
RewriteRule ^(.*)/seite/(.*)$ index.php?modul=$1&action=$2 [NC]
RewriteRule ^(.*)$ index.php?modul=$1 [NC,L]

Endeffekt ist, das ich mir das ganze design zerschossen habe und das sich keine Seite mehr öffnet ;)
Zu sehen ist das hier
 
Zuletzt bearbeitet:
1. den Modifizierer L an alle Regeln ran damit er nicht weitergeht nach einem Match
2. die Regel mit der Seite eine Zeile hoch
3. sind die Regulären Ausdrücke sehr allgemein gehalten, leg ruhig die Zeichen fest die erlaub sein sollen
Code:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9\-_]+)/seite/([a-zA-Z0-9\-_]+)$ index.php?modul=$1&action=$2 [NC,L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)$ index.php?modul=$1&action=$2 [NC,L]
RewriteRule ^([a-zA-Z0-9\-_]+)$ index.php?modul=$1 [NC,L]
RewriteRule ^$ index.php [NC,L]
Versuch es mal damit.

Gruß
 
Danke Raisch und allen anderen auch, genau das wars ;) Nun klappt es ! Ich melde mich dann wen ich auf das nächste Problem stosse ;)
 
Und da bin ich schon wieder ;)
Wen ich jetzt angebe http://www.meinedomain.de/gaestebuch/eintragen dann macht er das. So weit so gut. Wen ich jetzt aber die Seite wechseln möchte z.b. zu den News dann macht er nicht http://www.meinedomain.de/news sondern er macht http://www.meinedomain.de/gaestebuch/news wieso ist das so und wie kriege ich das wieder weg ?
Im Link statt:
HTML:
<a href="/news">link</a>
machst Du:
HTML:
<a href="http://www.meinedomain.de/news">link</a>

Oder html-Base im head angeben:
HTML:
<base href="http://www.meinedomain.de" />

Gruß
 
Zurück