2012-11-22 15 views
7

Ich möchte URLs mit htaccess zu besser lesbaren URLs umschreiben und die Variable $ _GET in PHP verwenden Ich benutze manchmal eine Subdomain, so dass es mit und ohne arbeiten muss. Außerdem sind die Variablen in der URL nicht notwendig. Ich nehme maximal 3 Variablen in der URL

die URL sub.mydomain.com/page/a/1/b/2/c/3 sollte sub.mydomain.com/a/1/b/2/c/3-sub.mydomain.com/page.php?a=1&b=2&c=3 und die URL führen sollte zu sub.mydomain.com/index.php?a=1&b=2&c=3 führen, wo $_GET['a'] = 1

Ich kam auf diese nach der Suche und versuchen, viel

RewriteEngine on 
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/$2.php?$3=$4&$5=$6&$7=$8 [QSA,NC] 
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/index.php?$2=$3&$4=$5&$6=$7 [QSA,NC] 
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/$2.php?$3=$4&$5=$6 [QSA,NC] 
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/index.php?$2=$3&$4=$5 [QSA,NC] 
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/$2.php?$3=$4 [QSA,NC] 
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)$ $1.domain.com/index.php?$2=$3 [QSA,NC] 
RewriteRule ([^/]+)\.domain.com/([^/]+)$ $1.domain.com/$2.php [L,QSA,NC] 

aber was ich bekomme ist ein Serverfehler nicht gefunden

Ich bin nicht so gut in diesem so vielleicht ich etwas beaufsichtigen.
Auch ich möchte es mit und ohne einen Schrägstrich am Ende arbeiten

Sollte ich RewriteCond verwenden und/oder einige Optionen festlegen?

Vielen Dank im Voraus.

+3

Anstatt diese Aufteilung in mod_rewrite zu tun, warum nicht einfach eine einfache Catchall-Regel haben ('RewriteRule^(. *) $ Index.php? P = $ 1') und dann die URL analysieren, wie Sie möchten in PHP . Die meisten CMS und Web-Frameworks tun dies auf diese Weise, da sie flexibler und einfacher zu warten sind und nicht von Apache abhängig sind. –

+0

@LieRyan und dann bis zu einem Maximum von 9 Variablen, gute Idee, ich werde das nächste Mal versuchen, habe ich das gleiche Problem. – Dediqated

+0

Ich kann nicht helfen aber sagen ... Q-Dance FTW! –

Antwort

7

Wenn Sie RewriteRule verwenden, fügen Sie den Domänennamen nicht in die Zeile ein. Stellen Sie außerdem sicher, dass Sie zuerst die RewriteEngine einschalten. Wie folgt aus:

RewriteEngine On 
RewriteRule ^([^/]+)/([^/]+)$ index.php?$1=$2 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.php?$1=$2&$3=$4 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.php?$1=$2&$3=$4&$5=$6 

Die erste Zeile wird sub.mydomain.com/a/1 zu sub.mydomain.com/page.php?a=1 umschreiben, die zweite Neufassungen sub.mydomain.com/a/1/b/2-sub.mydomain.com/page.php?a=1&b=2, und so weiter.

+0

Ja danke das funktioniert super! Meine schlechte, RewriteEngine wurde eingeschaltet. Ich bearbeite die Frage und lege sie in den Codeblock. – Dediqated