Rewrite: 2 Fragen

Hallo zusammen

Ich programmiere mir im Moment ein Seitensystem. Die Seite wird standardmässig so aufgerufen:

http://www.???.com/index.php?page=startseite

Durch googlen habe ich folgende .htaccess Code gefunden, um das ganze etwas schöner darzustellen:

RewriteRule ^([^/\.]+)$ index.php?page=$1 [L,QSA]

Nun kann ich auf mit folgendem Aufruf auf die Seite zugreiffen:

http://www.???.com/startseite

Nun, zu meinem 2 Problemen:

  1. Problem:
    Mit Unterseiten klappt es noch nicht ganz.

http://www.???.com/seite1/unterseite1 => http://www.???.com/index.php?page=unterseite 1

Kann ich via ModRewrite angeben, dass er quasi gleich vorgehen soll wie oben, jedoch nur den Wert nach dem letzten / nehmen soll?

  1. Problem:
    Ich möchte die URLs eigentlich in folgendem Format:

http://www.???.com/startseite/
http://www.???.com/seite1/unterseite1/

Ich habe mir bereits die Finger wund gegoogelt, jedoch kriege ich von meinem Apache Webserver immer nur 404er Errors…

Hoffe ihr könnt mir helfen :slight_smile:

Danke und Gruss,
molex

Wie willst Du denn von http://www.???.com/seite1/unterseite1 auf http://www.???.com/index.php?page=unterseite1 kommen? Da fehlt in letzterer URL mindestens noch 1 Wert. Im Idealfall müsste es ja so aussehen: http://www.???.com/index.php?param1=seite1&page=unterseite1 . Dann sähe die RewriteRule so aus:

RewriteRule ^([^/\.]+)/(.*)$ index.php?param1=$1&page=$2 [L,QSA]

Hi

Der 1 Wert der „fehlt“ ist rein optisch von Nutzen. Dadurch wird klar, dass es sich um einer Unterseite handelt. Der serverseitige Aufruf ist aber genau der selbe.

http://www.???.com/seite1/
wird zu
http://www.???.com/index.php?page=seite1

http://www.???.com/start/
wird zu
http://www.???.com/index.php?page=start

http://www.???.com/seite1/unterseite1/
wird zu
http://www.???.com/index.php?page=unterseite1

http://www.???.com/tiere/hunde/
wird zu
http://www.???.com/index.php?page=hunde

Hallo,

ach so,
dann versuche das mal so:

# wenn es auch kein Ordner ist RewriteCond %{REQUEST_FILENAME} !-d RewriteRule \/(\.)*$ index.php?param1=$1 [L,QSA]

Da bekommst aber ein Problem, das ich selber auch noch nicht gelöst bekommen.
Der Pfadangaben von js css und Bilder passen natürlich nicht da der Browser denkt das eine ebenne tiefer bist nämlich in seit1.
http://www.???.com/seite1/unterseite1

Habe mich aber noch nicht getraut hier zu fragen aber vielleicht wird das hier gelösst
Cheffchen

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
Und in den HTML-Head:
[html] [/html]

@Cheffchen: Nur Mut, wir beißen nicht. :wink:

Danke euch für die Antworten.

Werde das morgen ausprobieren :slight_smile:

Gruss,
molex

Hallo zusammen

Ich habe in meiner .htaccess nun folgenden Code:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule \/(\.)*$ index.php?page=$1 [L,QSA]

Nachdem setzten des base Meta Tags, sieht die Seite auch wieder „etwas“ schöner aus :smiley:

Nur wird der Page Parameter irgendwie nicht richtig übertragen. Wenn ich auf der index.php ein var_dump($_GET[‚page‘]) einbaue, kriege ich immer einen leeren String zurück.

Egal ob ich die Seite mit http://www.???.com/seite1/ oder http://www.???.com/seite1/unterseite1/

Danke euch fürs helfen :slight_smile:

Gruss,
molex

Hallo,

dann versuch mal das

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule /(.*)$ index.php?page=$1 [L,QSA]

Cheffchen

Hi

Danke für deine Antwort.

Folgender Aufruf funktioniert: www.???.com/seite1/unterseite1

Wenn ich den Aufruf via www.???.com/seite1/unterseite1/ versuche nimmt er das abschliessende / mit in den GET Parameter: unterseite1/

Beim Aufruf von www.???.com/seite1/ kriege ich weiterhin einen leeren String im GET Parameter.

Danke und Gruss,
molex

Hallo,

www.???.com/seite1/unterseite1/
is ja klar das dies nicht passt, RewriteRule findet ja kein treffe da am ende ein / ist :O).
Versuche mal mit OR, frage mich jetzt aber nicht ob das jetzt da 100% richtig steht :O)

[CODE]RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /(.)$ index.php?page=$1 [L,QSA,OR]
RewriteRule /(.
)/$ index.php?page=$1 [L,QSA]

[/CODE]
Cheffchen

Verschoben aus dem anderen Thread:

[indent]Tu dir einen Gefallen und zerleg den Request URI mit PHP.

.htaccess

[code]RewriteEngine On

If a resource exists, serve it

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

Otherwise, redirect to index file

RewriteRule ^.*$ index.php [NC,L][/code]

index.php

[php]<?php

$basePath = pathinfo($_SERVER[‚SCRIPT_NAME‘], PATHINFO_DIRNAME);
$requestPath = parse_url($_SERVER[‚REQUEST_URI‘], PHP_URL_PATH);
$relativePath = substr($requestPath, strlen($basePath));

$pathParts = explode(‚/‘, trim($relativePath, ‚/‘));

var_dump($basePath, $requestPath, $relativePath, $pathParts);[/php]

Beispielausgabe bei mir:

[code]string ‚/nb/x‘ (length=5)

string ‚/nb/x/abc/def/ghi‘ (length=17)

string ‚/abc/def/ghi‘ (length=12)

array
0 => string ‚abc‘ (length=3)
1 => string ‚def‘ (length=3)
2 => string ‚ghi‘ (length=3)[/code][/indent]

Hallo zusammen

Danke euch für die Hilfe. Hat wunderbar geklappt :slight_smile:

Gruss,
molex