2012-04-03 9 views
1

So, hier ist mein Problem ....htacess mit Variablen für benutzerfreundliche Urls

ich diese beiden Urls bekam:

/Portfolio/stamped_concrete

/p_details.php?id_cat=23 & ? id = 91

ich die zweite uRL Rewrite machen möchten: /Portfolio/stamped_concrete/23/91

stamped_concrete ist eine dynamische URL, weshalb ich nicht weiß, wie ich das lösen kann. Auch die beiden Dateien (portfolio.php und p_details.php) befinden sich im selben Verzeichnis, wenn das wichtig ist.

Irgendwelche Ratschläge, wie würde ich das erreichen?

EDIT:

stamped_concrete ist auch eine variable Zeichenfolge, die ich vor dem neu geschrieben und es funktioniert:

RewriteRule ^services/([a-z0-9_-]+)$ /services.php?url=$1 [NC,L,QSA] 

so wie würde ich es nennen in der RewriteRule?

wäre dies auf dem richtigen Weg?

RewriteCond %{QUERY_STRING} url=([a-z0-9_-]+) 
RewriteCond %{QUERY_STRING} id_cat=([0-9]+) 
RewriteCond %{QUERY_STRING} id=([0-9]+) 
RewriteRule /p_details.php?.* /portfolio/$1/$2/$3 
+0

Nur ein Kommentar - Sie haben ein zusätzliches Fragezeichen in Ihrer Query-Zeichenfolge (könnte in diesem Beitrag ein Tippfehler sein) - stellen Sie sicher, dass es nur eine q-Markierung gibt, die ALLE get vars vom Rest der URI trennt. Keine Notwendigkeit, einen nach dem kaufmännischen Und-Zeichen zu setzen. – Kasapo

+0

Oh ja, das war ein Tippfehler. – Milkman7

+0

Ich dachte mir. Könnten Sie auch eine Beispiel-Anforderungs-URI angeben? Es wäre schön, den ursprünglich angeforderten Pfad zu sehen. Ich bin mir nicht sicher, was Sie mit dynamischer URL für "stamped_concrete" meinen ...wenn du das ein bisschen erklären könntest. Sie können URL Rewrite-Regeln verketten, aber Sie müssen vorsichtig sein, damit Sie die URL nicht unbegrenzt neu schreiben (Apache erkennt dies normalerweise, so dass Sie den Prozess nicht aufhängen) und damit die URL korrekt umgeschrieben wird. Aber ja, auf dem richtigen Weg denke ich! – Kasapo

Antwort

0

Try this:

RewriteCond %{QUERY_STRING} id_cat=([0-9]+) 
RewriteCond %{QUERY_STRING} id=([0-9]+) 
RewriteRule /p_details.php?.* /portfolio/stamped_concrete/$1/$2 

Möglicherweise müssen sie ein wenig optimieren - nicht sicher, ob der RewriteRule Teil korrekt ist (sorry).

Aber der wichtige Teil ist QUERY_STRING, die Apache-Dokumentation sehen: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

Auch aus http://wiki.apache.org/httpd/RewriteQueryString

ich immer die Rückreferenzierungen mischen, so probieren Sie es aus, es ist eiher Dollar-Zeichen oder Prozentzeichen (ich dachte wirklich, es war Dollarzeichen ...)

(Zitat)

machen die Abfrage-String Teil des Pfades

Nehmen Sie eine URL des Formulars http://example.com/path?var=val und transformieren Sie sie in http://example.com/path/var/val. Beachten Sie, dass dieses spezielle Beispiel nur für ein einzelnes var = val-Paar funktioniert, das nur Buchstaben, Zahlen und den Unterstrich enthält.

RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$ 
RewriteRule ^/path /path/%1/%2? 

(Ende Zitat)

So könnte man wohl sagen, nur "RewriteRule ^/p_details.php/Portfolio /% 1 /% 2 /% 3"

+0

Danke für die Hilfe. Nachdem ich mehrere Methoden ausprobiert hatte, funktionierte das für mich: 'RewriteRule^portfolio /? ([^ /] *) /? ([^ /] *) /? ([^ /] *) /p_details.php?id_cat = $ 2 & id = $ 3 [QSA, NC, L] ' – Milkman7