colargol
5.08.2010, 13:17:37
Chciałbym, aby po wpisaniu adresu URL:
example.com/7890/page.html
był wczytywany na serwerze plik z katalogu:
/7/8/9/0/page.html
(lub np. /abc/page.html => /a/b/c/page.html)
Jak to zrobić za pomocą mod rewrite i .htaccess?
kilas88
5.08.2010, 13:22:30
Raczej tego nie zrobisz, ponieważ mod_rewrite działa na zasadzie przepisywania linków, nie ich modyfikacji. Niemniej jednak ciekawe pytanie - jeśli ktoś zna odpowiedź to z chęcią także się dowiem :-)
Jeśli ID jest stałej długości, to powinno zadziałać tak:
RewriteRule ^([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})/page\.html$ /$1/$2/$3/$4/page.html [L]
batman
5.08.2010, 13:39:51
Jeśli ilość znaków jest stała można pokusić się o coś takiego:
RewriteRule ^(.){1}/(.){1}/(.){1}/(.*)\.html$ /$1/$2/$3/$4\.html [L]
Regułkę napisałem bez przetestowania, więc może wymagać drobnej modyfikacji.
kilas88
5.08.2010, 13:50:41
No właśnie, jeśli liczba znaków jest stała. A co jeśli nie jest stała (ok, można dać znak zapytania w wyrażeniu) lub jeśli przekracza 10 znaków? :-)
batman
5.08.2010, 14:01:21
Na upartego możesz zrobić tak:
RewriteRule ^(.){1}/(.){1}/(.){1}/(.*)\.html$ /$1/$2/$3/$4\.html [L]
RewriteRule ^(.){1}/(.){1}/(.*)\.html$ /$1/$2/$3\.html [L]
RewriteRule ^(.){1}/(.*)\.html$ /$1/$2\.html [L]
Takie coś pozwoli na "dynamiczne" określenie ilości znaków. Niestety w przypadku większej ilości znaków nie zda to egzaminu i pozostanie jedynie PHP.
~batman, mimo wszystko lepiej jest zawęzić zakres znaków. Kropka wskazuje na dowolny, więc ktoś mógłby tam wstawić slesza i nie ręczę za skutki. Poza tym, w podstawniku nie trzeba escape'ować kropki.
batman
5.08.2010, 14:16:11
~erix
Zawężenie regułki do konkretnych znaków powinno być wykonane, tutaj nie ma dyskusji. Chciałem jedynie pokazać przykład jak to działa. Co do kropki, to zawsze miałem problem. Dzięki za wyjaśnienie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.