SEO-Software von Suchmaschinenoptimierung.de

[mod_rewrite] Verschieden viele Parameter mit / einlesen

(hier klicken, um zum Original Thread zu gelangen)
Belly
Tach!

Ich ändere durch mod_rewrite meine URLs folgendermaßen:

domain.tld/beispiel -> domain.tld/index.php?page=beispiel

Jetzt möchte ich aber gerne noch weitere Parameter übergeben... das habe ich bis jetzt immer so gemacht:

domain.tld/beispiel&foo=bar -> domain.tld/index.php?page=beispiel&foo=bar

Habe dafür diese .htaccess:

code:
1:
2:
3:
4:
RewriteEngine on
RewriteCond   %{REQUEST_FILENAME}   !-d
RewriteCond   %{REQUEST_FILENAME}   !-f
RewriteRule   (.*)                  /index.php?page=$1   [L]


Das funktioniert ja auch alles wunderbar, sieht nur nicht hübsch aus. Wie schaffe ich es, dass ich es so ändere:

domain.tld/beispiel/foo/bar -> domain.tld/index.php?page=beispiel&foo=bar
oder wahlweise (was einfacher ist)
domain.tld/beispiel/foo/bar -> domain.tld/index.php?page=beispiel&var1=foo&var2=bar
Kann ich dann ja via php umbasteln.

So wo ist jetzt das Problem? Dafür könnte ich ja ganz einfach den obigen Code umstellen. Das Problem ist aber, dass er, wenn ich zwei umzuwandelnde Parameter angebe, er auch zwei haben will. Also:

code:
1:
2:
3:
4:
RewriteEngine on
RewriteCond   %{REQUEST_FILENAME}   !-d
RewriteCond   %{REQUEST_FILENAME}   !-f
RewriteRule   (.*)/(.*)                  /index.php?page=$1&foo=$2   [L]


Funktioniert bei domain.tld/beispiel/bar wunderbar, gibt bei domain.tld/beispiel aber einen Fehler aus, weil ihm der zweite Parameter fehlt -.-

Habt ihr eine Idee, wie man das Problem lösen kann? Kann man in der .htaccess irgendwie abfragen, wieviele Parameter es gibt?

Und dann geht es noch einen Schritt weiter: Eigentlich brauch ich das dynamisch, damit auch folgendes klappt:

domain.tld/beispiel/user/belly/tab/5/galerie/13/foo/bar/id/234fc98ac8e89fac
8a -> domain.tld/index.php?page=beispiel&user=belly&tab=5&galerie=13&foo=bar&id=2
34fc98ac8e89fac8a

Baby
TroX
code:
1:
2:
3:
RewriteRule ([^/\.]+)(/?([^/\.]+)(/?([^/\.]+)(/?([^/\.]+)(/?([^/\.]+)|)|)|)|) index.php?arg1=$1&arg2=$2&arg3=$3&arg4=$4&arg5=$5


ungetestet.
moonsword
wahrscheinlich ist es einfacher, dass ganze per php auseinanderzunehmen....d.h. du übergibst den ganzen string als load oder ähnliches und nimmst ihn dann mit split auseinander....

ansonsten schau dir mal rekursion an
Belly
@moonsword: Hmm mit dem Split hatte ich schon versucht, habs aber irgendwann aufgegeben -.-

@TroX: Danke schonmal smile Funktioniert schon fast... benutze diesen Code:

code:
1:
2:
3:
4:
RewriteEngine on
RewriteCond   %{REQUEST_FILENAME}   !-d
RewriteCond   %{REQUEST_FILENAME}   !-f
RewriteRule ([^/\.]+)(/?([^/\.]+)(/?([^/\.]+)(/?([^/\.]+)(/?([^/\.]+)|)|)|)|) /mod_rewrite/index.php?arg1=$1&arg2=$2&arg3=$3&arg4=$4&arg5=$5 [L]


Und es gibt dieses hier: http://dev.alexb.de/mod_rewrite/1/2/3/4/5

Da stimmt noch irgendwas nicht ganz Augenzwinkern Hast du ne Ahnung woran das liegt und wie ich den Code modifizieren muss?

Nur der Vollständigkeit halber, der Code der index.php

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php

echo "Hallo, Welt!<br><br>";

echo "$"."_GET['arg1'] = '".$_GET['arg1']."'<br>";
echo "$"."_GET['arg2'] = '".$_GET['arg2']."'<br>";
echo "$"."_GET['arg3'] = '".$_GET['arg3']."'<br>";
echo "$"."_GET['arg4'] = '".$_GET['arg4']."'<br>";
echo "$"."_GET['arg5'] = '".$_GET['arg5']."'<br>";

?>


Dankeschön! Gruß, Alex
der_nic
Zitat:
@moonsword: Hmm mit dem Split hatte ich schon versucht, habs aber irgendwann aufgegeben -.-


php:
1:
2:
3:
4:
5:
<?php $parameter $_SERVER['REQUEST_URI'];
$parameter explode("/"$parameter);
$arg1 $parameter[0];
$arg2 $parameter[1];
... ?>


Wie lange versucht? Augenzwinkern
Belly
@nic: Bei mir kam das Problem auf, dass er die style.css nicht mehr richtig eingebunden hat, weil ich die als relativen Pfad angegeben habe (und das auch so lassen möchte) und dann die ganze Seite nicht mehr richtig angezeigt wurde. Ich hab dann alles mögliche versucht mit QUERY_STRING und PHP_SELF und in was-weiß-ich wievielen anderen komischen Variablen das drin steht (s. phpinfo() ). Aber es hat nie geklappt. Auch nicht mit komplett löschen, überschreiben, neuzusammensetzen, etc. Dann hab ich aufgegeben und euch gefragt smile

Ich hätte aber weiterhin lieber eine Lösung mit mod_rewrite... kannst du das umbasteln? Sonst frage ich nochmal im mod_rewrite-Forum direkt nach (die sind unfreundlicher als hier, deshalb frag ich erst hier großes Grinsen )

Gruß, Alex
der_nic
Das Problem der CSS Datei, bzw allgemein von relativen Pfaden kannst du ganz einfach mit dem <base /> Element von HTML lösen.

Wie muss es zwingend mod_rewrite sein? Das ist sehr unflexibel falls du irgendwann neue/mehr Parameter anhängen willst..!
TrioxX
RewriteEngine On
RewriteRule ^index.php(.*)$ index.php$1 [L]
RewriteRule ^(.+)\/(.+[^/])[/]?$ index.php?page=$1&foo=$2 [L]
RewriteRule ^(.+[^/])[/]?$ index.php?page=$1&foo=$2
Belly
hm dankeschön erstmal!

Werde es dann dochmal mit PHP versuchen, wusste nicht, dass es dieses base-Element gibt smile

Alex
(hier klicken, um zum Original Thread zu gelangen)



Tipp: Ranking-Konzept.de - Das SEO-Forum (Forum rund um die Suchmaschinenoptimierung) der artaxo AG.
Das große Versicherungs ABC von Versicherung.de - mit allen Aspekten der Computerversicherungen!
Fan-Foren.de, die große Community mit Musikforum ist ab sofort online.