Mam pewien problem z ustawieniami mod rewrite w .htacces. Chciałem ustawić sobie przyjazne linki produktów w sklepie. Tak więc stworzyłem taką instrukcję dla .htaccessa:
Kod
RewriteEngine On
RewriteRule ^([^/]*)\.html$ /index.php?title=$1 [L]

W tym wypadku umieściłem takie linki:
  1. <a href="/koszyk.wazyw.html">Koszyk Warzyw</a>

(wcześniej było: index.php?title=koszyk.warzywa)

No i ogólnie pięknie działało (tzn. na podstawie nazwy pobierało dane z bazy i generowało odpowiednią stronę - coś jak na filmweb.pl). Ale niestety okazało się, że nie jest tak pięknie. Jak wpisałem adres np. www.mojastrona.pl/innastrona/inna.html to traktuje to jako skrócony adres i nie zachowuje się jak powinien w moim zamyśle, czyli nie pokazuje wskazanej strony.
Potem postanowiłem dodać do linku jeszcze id produktu, czyli teraz wyglądał on tak:
  1. <a href="/koszyk.wazyw_432.html">Koszyk Warzyw</a>

przy pomocy polecenia explode() po prostu wyjmowałem nazwę produktu, która pojawia się w tytule strony. Myślałem, że da to dwojakie korzyści:
  1. wreszcie uda mi się "normalnie" poruszać po stronie, czyli wszystkie adresy będą poprawnie działały
  2. jako że id jest kluczem głównym, uznałem, że skrypt będzie szybciej wyszukiwał w bazie.


Tak jak co drugiego wydaje mi się miałem rację, tak pierwsze niestety nie wypaliło i na dal nie chce ruszyć.
No, ale że nie chciałem się poddać za szybko postanowiłem dodać jeszcze jedną część linku, chociaż tutaj już odchodzi pomysł posiadania takich linków jak filmweb, czyli już przestają mi się one podobać. Teraz podstawowy link wyglądał w ten sposób:
  1. <a href="index.php?opcja=produkt&title=koszyk.wazyw.html">Koszyk Warzyw</a>

a po utworzeniu .htaccessa o takiej treści:
Kod
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?film=$1&title=$2 [L]

wyglądał tak:
  1. <a href="/produkt/koszyk.wazyw_432.html">Koszyk Warzyw</a>

No i teraz przy pomocy ifa
  1. if(isset($_GET['title'])){
  2. $title=htmlspecialchars($_GET['title']);
  3. $test=explode('_',$title);
  4. if(isset($test[1])){
  5. if($test[0]=='koszyk.wazyw'){
  6. $title=str_replace('.',' ',$test[0]);
  7. produkt($title);
  8. }
  9. else{
  10. echo'Tytuł produktu: '.$test[0].'';
  11. }}}
  12. else{
  13. echo'<a href="/produkt/koszyk.wazyw_432.html">film1</a><br>';
  14. echo'<a href="/strona.html">Strona</a><br>';
  15. }

sprawdzam wszystko (przynajmniej tak mi się wydaje).
Generalnie, jest to dosyć uproszczony kod, ale przedstawia chyba ogólny zarys. Funkcja produkt tworzy stronę produktu na bazie szablonu.
No i teraz mam pytanie, do osób lepiej znających się na .htaccess o jakąś poradę, bo już zabrakło mi pomysłów. Najbardziej bym chciał, żeby linki wyglądały tak jak w pierwszej wersji, czyli - /koszyk.warzyw.html, ew. jak w drugiej - /koszyk.warzyw_432.html.

Może ktoś mi pomóc?