Cytat(wlamywacz @ 31.05.2008, 17:15:29 )

Witam

Mam problem z modrewrite takiego typu:
Chce aby każdy adres
beta/{dowolny ciąg znaków bez -} kierowało na beta/blog.php5 - działa to
Chce aby wybranie pliku z końców jpg, png, gif lub css omijało te regułę i otwierało - działa to
Ale jak zrobić że gdy user wpiszę
beta/zdjecia/{dowolny ciąg znaków bez -} otworzy mu ten plik i ominie regułę. A oto kod który stworzyłem i proszę o pomoc z dopisaniem do niego ostatniego przypadku.
RewriteRule ^beta/([^-]+[^(\.css|\.jpg|\.png|\.gif)])$ beta/blog.php5 [L]
Wybacz, ale Twoja reguła jest dziurawa jak ser szwajcarski, bo jest po prostu niepoprawna składniowo, a działa w miarę OK trochę przez przypadek. Fragment typu
[abc] lub
[^abc] służy do określania które znaki odpowiednio
są/nie są dozwolone (w sensie pasowania do reguły). Adres ze ścieżką typu
beta/boooo.piss (lub mnóstwo podobnych, w których rozszerzeniach występują znaki ze zbioru
cfgijpns) nie zostanie zamieniony i zapewne skończy się to błędem 404 (not found). Pewnie to niewielki problem, ale w poważniejszych zastosowaniach taka luka może oznaczać kłopoty.
Ponieważ poprawienie tej reguły nie jest praktycznie możliwe w jednym kawałku, proponuję utworzyć najpierw reguły dla każdego z wyjątków (może być w jednej), które przekierowują na ten adres, który został wpisany (czyli de facto nie przekierowują, zostawiają wszystko jak jest), a na samym końcu regułę, która cokolwiek (
.*) skieruje na
blog5.php. Myślę, że może pomóc także wykorzystanie dyrektywy
RewriteCond (warunek dla
RewriteRule).
Pozdr.
Wodzu