Frage Frage zu Rewrite Rules (mehrere GET Parameter)

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Abraxas

Neues Mitglied
21 Februar 2018
5
0
1
24
Morgen zusammen,
ich arbeite aus Spaß an einer Homepage. Diese soll bzw. ist Multi-Languagefähig. Dafür wird ein Parameter über GET übergeben (DE, EN, JP usw.). Diese läuft lokal auf einem virtuellen Webserver (Apache, MAMP). Damit im Pfad nicht
Code:
localhost:8888/tafellauf/index.php?lang=de
steht, verwende ich eine htaccess Datei, welche aus der URL oben folgende macht:
Code:
localhost:8888/tafellauf/de
Doch jetzt möchte ich noch weitere Parameter auf die gleiche Weise übergeben. Wie zum Beispiel welche Seite aufgerufen werden soll usw.
Also aus:
Code:
localhost:8888/tafellauf/index.php?lang=de&page=home
Soll folgendes werden:
Code:
localhost/tafellauf/de/home
Die "alte" htaccess-Datei, mit nur einem Parameter funktioniert wunderbar. Doch sobald ich einen zweiten hinzufüge, funktioniert nichts mehr. So sieht die Datei mit einem Parameter aus. (RewriteBase auf /tafellauf/ setzen bekomme ich nicht hin. Muss also die Sprachen über "/tafellauf/de" aufrufen. Würde auch lieber über "/de" aufrufen. Wenn da mir auch jmd weiterhelfen könnte, wäre nett.

Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?lang=$1 [L]
Wir haben in der Schule immer nur mit einem Parameter gearbeitet und nie mehrere verwendet. Und ich habe vieles ausprobiert, doch ich komme damit nicht weiter. Könnte man mir zeigen wie man mehrere Parameter, oben, verwenden kann? Und eine kleine Nebenfrage für später. Wenn optional nur 4 von 5 Parameter benötigt werden und nur manchmal alle 5, ist das auch möglich in einer Rule zu machen?
Grüße,

Richy aka Abraxas
 

threadi

Moderator
Team
Moderator
20 Oktober 2006
15.325
292
83
Leipzig
www.comedy-news.de
Beispiel:

Code:
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&home=H2 [L]
Du kannst auch mehrere Rules angeben um alle Aufbauen abzufangen, achte dabei auf die Reihenfolge in der .htaccess-Datei.
 

Abraxas

Neues Mitglied
21 Februar 2018
5
0
1
24
Als erstes danke für die schnelle Antwort.
Meine htaccess Datei sieht nun so aus:
Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?lang=$1
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]
Doch nun sind alle meine CSS Deklarationen weg und die erste Regel funktioniert. Doch die zweite funktioniert nicht mit dem Parameter page. Was ist da falsch?
 

threadi

Moderator
Team
Moderator
20 Oktober 2006
15.325
292
83
Leipzig
www.comedy-news.de
Die Conditions musst Du pro Rule angeben. Also:
Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?lang=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]
Wenn die letzte Rule auch deine Style-URLs treffen würde, müsstest Du für diese ggfs. eine weitere Condition ergänzen um sie auszuschließen.
 

Abraxas

Neues Mitglied
21 Februar 2018
5
0
1
24
Das mit den CSS Dateien funktioniert jetzt gut. Die erste Rule funktioniert auch wunderbar. Wenn ich aber die zweite oben anhänge, also "tafellauf/de/home", fällt "home". Immer weg. Ich habe eine eine Variable die $_GET['page'] auslesen soll und einfach im Contenbereich ausgeben soll. Doch das passiert nicht und /home fällt immer bei der URL weg.
 

threadi

Moderator
Team
Moderator
20 Oktober 2006
15.325
292
83
Leipzig
www.comedy-news.de
Nutzt Du wirklich dieses Unterverzeichnis? Dann stimmt ggfs. die Angaben ^ bei den Rules nicht. Die besagt, dass der String mit Variable $1 anfangen muss. Somit könnte beim Aufruf in einem Unterverzeichnis die Rule auch gar nicht greifen. Bin mir dessen nur etwas unsicher da ich selten mit Unterverzeichnissen arbeite.
 

Abraxas

Neues Mitglied
21 Februar 2018
5
0
1
24
Also, mein Projekt ist wie folgt aufgebaut. In MAMP ist als Verzeichnis für den Webserver der Ordner "webserver" ausgewählt. In diesem Ordner hat dann jedes Projekt seinen eigenen Ordner. Also ist für dieses Projekt dort ein Ordner mit dem Namen "tafellauf". Darin befindet sich die index.php und die .htaccess Datei. CSS und Images sind in weiteren Ordnern. Aber die funktionieren ja. Die erste Variable mit bspw. "/de", "/en" usw. funktioniert. Wenn eine nicht bekannte Sprache gewählt wird, wird automatisch "/en" genommen. Doch wenn ich da jetzt einfach noch eine GET Variable dranhängen möchte und dann in der index.php nur ausgeben möchte, passiert da nichts und aus beispielsweise "/de/home" wird nach dem Laden wieder nur "/de"
 

Sentence

Aktives Mitglied
30 Juni 2011
470
46
28
Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?lang=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]
Du musst die reihenfolge anpassen, die erste regel trifft schließlich immer zu.

Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]
RewriteRule ^(.*)$ index.php?lang=$1[L]
MfG
 
Reactions: Abraxas

Abraxas

Neues Mitglied
21 Februar 2018
5
0
1
24
Danke euch bis jetzt. Jetzt funktioniert fast alles richtig. "/de" usw. funktioniert perfekt, auch mit den Style Dateien. "/de/home" funktioniert auch soweit und home wird ausgegeben. Doch hier sind wieder alle Styles ausgeblendet. Die htaccess-Datei sieht aktuell so aus =>
Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?lang=$1 [L]
 
Werbung: