2016-04-08 23 views
0

Ich habe eine URL, die manchmal einen oder mehrere Parameter hat, und ich möchte entsprechend neu schreiben können.Rewrite URL mit mehreren Parametern

Die URLs sind wie folgt:

/index.php?pagetitle=Home 

ich es geschafft haben, diese URL zu erhalten, zu zeigen, wie ich die folgenden Methoden die gewünschte Funktion:

/Home 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([0-9a-zA-Z]+) index.php?pagetitle=$1 [NC,L] 

Ich möchte auch in der Lage sein, dieselbe URL zu haben, aber mit der Artikelnummer

.com/index.php?pagetitle=Home&articleid=20 

, die Ich mag würde wie folgt angezeigt:

.com/Home/20 

Aber ich kann nicht scheinen, um herauszufinden, wie es auf mehr als einen Parameter zur Arbeit zu kommen.

UPDATE: Ok, so gelang es mir, die unten an der Arbeit mit: index.php Seitentitel = $ 1 & articleid = 2 $

, die als angezeigt: .com/Home/20

Ich habe versucht, einen Schritt weiter zu gehen und in der Lage zu sein, den Artikeltitel zu verwenden, und die Regel, die ich versuchte, ist wie folgt.

RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articletitle=$2&articleid=$3 [NC,L,QSA] 

So würde angezeigt werden als: .com/Home/Article/20

Aber es funktioniert nicht für mich arbeiten will Hat jemand wissen, was ich vorher falsch und nochmals vielen Dank tue.

http://karpium.co.uk/Home/Baits/20 - Diese URL funktioniert

http://karpium.co.uk/Home - Aber diese URL nicht funktioniert, wo, wie es funktioniert, wenn nur die Seitentitel mit = und articleid =

+0

nutzte ich, um diesen ziemlich url Apache Routing meinen Kopf zu schlagen, aber dann merkte ich es in PHP getan einfacher ist. Versuchen Sie es mit SLIM PHP ", es bietet einfaches, komfortables Routing und sehr hohe Leistung und mehr Funktionsreichweite als Apache.conf files – peter

+0

Danke Hauptgrund für den Versuch, es in Htaccess zu tun ist, weil es ein College-Projekt ist und wir die Website in so wenig Scripting wie möglich erstellen müssen, aber ich werde nach zukünftigen Projekten suchen danke – Scorpion

Antwort

-1

Sie können die folgende Regel verwenden:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articleid=$2 [NC,L,QSA] 
+0

Könnten Sie einige Erklärungen hinzufügen zu dieser Antwort? –

0

Ok, so scheint es, als hätte ich es mit 3 verschiedenen Rewrite-Regeln behoben, die wie folgt sind:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([0-9a-zA-Z]+)$ index.php?pagetitle=$1 [NC,L,QSA] 
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))?/?$ index.php?pagetitle=$1&articletitle=$2 [NC,L,QSA] 
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articletitle=$2&articleid=$3 [NC,L,QSA] 

Wenn jemand etwas Licht auf einige Teile des Regex für mich abwerfen kann, würde es sehr geschätzt werden:

Was bedeuten die folgenden?

?:/

? /?

Nochmals vielen Dank für die Hilfe :)

+0

**?: ** wird für nicht erfassende Gruppen verwendet. ** (?:/(foo)) ** erfasst ** foo ** und speichert den erfassten Wert als ** $ 1 **, ohne **?: ** die Fanggruppe ** (/ (foo)) ** erfasst **/foo **. und ** /? ** bedeutet, dass **/** optional ist. Sie sollten über Regex lesen. Es gibt viele Seiten und Tutorials zur Verfügung. Google suchen. – starkeen