Witam,
w dniu dzisiejszym rozpoczęła się moja przygoda z mod_rewrite. Przejrzałem wiele stron i usilnie starałem się sprawić aby na mojej stronie pojawiły się wreszcie przyjazne URL'e. Rzekłbym "udało się!" i udał na kolejne piwo jednak nie wszystko działa jak bym sobie tego życzył. Na dobry początek wkleję zawartość .htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^([^/.]+)/?$ index.php?show=$1 [NC,L]
Efektów chyba się domyślacie:
http://strona.pl/index.php?show=articles
przyjmuje piękny adres w postaci
http://strona.pl/articles/
Niestety w przeglądarce firefox po wprowadzeniu adresu:
http://strona.pl/articles/
jest on zmieniany na:
http://strona.pl/?show=articles
Ponadto zauważyłem, że gdy wprowadzę w firefoxa następujący adres:
http://strona.pl//articles/
to wyświetla się żądana zawartość. Niestety przybył kolejny ukośnik a chciałbym aby we wszystkich przeglądarkach adres wyglądał tak samo.
Kombinowałem zatem i przerobiłem zaklęcie:
RewriteRule ^([^/.]+)/?$ index.php?show=$1 [NC,L]
na:
#RewriteRule ^(.+)\.html$ index.php?show=$1 [NC,L]
Owe polecenie dodaje .html zamiast ukośnika (/) na końcu. W rezultacie otrzymuję:
http://strona.pl/articles.html
Niby wszystko ok jednak uparłem się przy wersji pierwotnej i nigdzie nie mogę znaleźć odpowiedzi na mój problem. Czy wina leży po stronie przeglądarki czy może raczej po stronie składni polecenia w .htaccess?
Na koniec dodam tylko, że zmieniany jest tylko środek strony poprzez include w takiej postaci:
(zawartość pliku index.php)
$dozwolone=array('start','articles','portfolio','blog');
if (isset($_GET['show'])) $show=$_GET['show']; else $show=$dozwolone[0];
if (in_array($show,$dozwolone)) include($show.'/'.$show.'.php');
else include('404.php');
Oczywiście ma to wpływ na zmiany w adresie url jak zapewne o tym wiecie. Czemu o tym wspomniałem?
Jeśli uruchomię stronę pierwszy raz poprzez:
http://strona.pl/
to zmienna "show", która powinna przyjąć wartość "start" natomiast pozostaje pusta i w taki oto sposób w firefoxie widzę następujący URL:
http://strona.pl/?show=
Zaznaczam ponownie, że problem wsytępuje tylko w przeglądarce firefox.
Czekam na Wasze dobre rady.
Pozdrawiam,
uL33k