2013-04-21 15 views
5

chcę użyć Apache mod_rewrite, aby być w stanie podjąć każdy folder ścieżki jako konkretnego parametru zapytania, na przykład rozważmy następujący:Nazwa ścieżki Apache mod_rewrite jako parametry zapytania?

podstawowy przykład

Url wnioskować: http://domain.com/shoes/prada/image-1/

Page serwowane: http://domain.com/?cid=shoes&bid=prada&pid=image-1

W tym scenariuszu istnieją 3 podfoldery wnioskowane (/shoes/, /prada/ następnie image-1), więc pierwszy podfolder jest przekazywany na rzeczywistą stronę obsługiwaną jako cid, drugi jako bid, a trzeci jako pid.

Pełny przykład

Jednak chciałbym również to, aby służyć konkretnej strony w zależności od liczby podfolderów współpracującego, np

Url wniosek: http://domain.com/shoes/prada/

Page serwowane: http://domain.com/shop.php?cid=shoes&bid=prada

Jak dotąd wszystko udało mi się znaleźć jest dopasowanie oparte regex dla mod_rewrite ale moja ścieżka będzie się znacznie różnić, dlatego chciałbym mieć warunki w zależności od liczby folderów, do których dostęp uzyskałem (proszę zauważyć, że nie jestem aż tak dobry z regex - myślę, że pomoże w tym postać wieloznaczna, ale nie byłbym pewien, od czego zacząć).

Każda pomoc w tej sprawie byłaby bardzo ceniona! To dość długo się kręci, więc jeśli potrzebujesz więcej informacji do wyjaśnienia, daj mi znać!

+0

@faa The 1st przykład było po prostu pokazać podstawę moje pytanie (np parametry wzięte z katalogów), podczas 2nd było pokazanie strony są podawane na podstawie liczby parametrów. Przez "liczbę dostępnych folderów" rozumiałem liczbę parametrów przekazywanych z myślą, że parametr 1 folder = 1, taki jak/ścieżka/do/folderu -> 1 = ścieżka, 2 = do, 3 = folder. – Kemebear

Odpowiedz

7

Przy odrobinie pracy udało mi się dostosować niektóre wyrażenia regularnego, a otrzymasz zestaw reguł pracy za to, co chciałem:

RewriteEngine on 
RewriteRule ^(.*)/(.*)/(.*)/(.)?$ product.php?tid=$1&sid=$2&eid=$3 [L] 
RewriteRule ^(.*)/(.*)/(.)?$ brand.php?tid=$1&sid=$2 [L] 
RewriteRule ^(.*)/(.)?$ shop.php?tid=$1 [L] 

To jest nieco inny do przykładu, jednak to właśnie przeznaczone dla na pierwszym miejscu.

Pozwala to na przepisywanie up URL do głębokiej cztery foldery, z „name” z każdego folderu jest zadana jako parametr, a każdy dodatkowy poziom głębokości przepisywania URL do osobnego zasobu na przykład:

http://x.com/shoes/prada/2011-high-heels/ -> http://x.com/product.php?tid=shoes&sid=prada&eid=2011-high-heels 

Testowane na http://martinmelin.se/rewrite-rule-tester/

+1

Możesz "zaakceptować" swoją własną odpowiedź. – leticia

Powiązane problemy