Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Przyjazne linki jednowyrazowe
Forum PHP.pl > Forum > PHP
albectus
Witam serdecznie. Zastosowałem na swojej stronie przyjazne linki, ktore mi w tytule sciagaja tytuł danego artykułu i zauwazylem probiem, kiedy tytuł ma postać "artykul-o-pewnej-osobie" jest wszystko dobrze ale jezeli tytuł jest bez myslnika np "oferta" to niestety strona sie nie otwiera. Gdzie tkwi problem? Ponizej moj plik hataccess [code
ErrorDocument 404 /index.php
ErrorDocument 403 /index.php
Kod
Options FollowSymLinks
RewriteEngine On

RewriteRule ^([^-]*),([^-]*)$ index.php?go=$1&kat=$2 [L]

RewriteRule ^art,([^-]*),(.+)$ index.php?go=art&id=$1&tytul=$2 [L]]
.radex
Nie rób tak tego!

Po prostu przekieruj (za pomocą mod_rewrite) wszystko, co nie jest istniejącym plikiem lub folderem na index.php/X, a resztę rób po stronie PHP.

Wygląda to mniej-więcej tak (zapewne można to trochę polepszyć -- nie jestem specem od .htaccess -- ale powinno działać):

Kod
<IfModule mod_rewrite.c>
   RewriteEngine On
  
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>


I teraz to co masz po index.php/ jest dostępne w PHP za pomocą $_SERVER['PATH_INFO']

Serio, oszczędzisz sobie dużo kłopotu -- znacznie łatwiej parsować (i debugować) takie konstrukcje w PHP.
albectus
Dzieki kolego za rade, ale niestety twoj skrypt cos nie dziala nie mam nawet strony glownej. Co jeszcze musze zmienic? zaczynam z tym zabawe dopiero.
.radex
Bez zmian się nie obędzie, niestety.

Spróbuj na stronie głównej jedynie

  1. var_dump($_SERVER['PATH_INFO']);


I odpal http://adres_strony/foo/bar/

O ile niczego popsułem w kodzie .htaccess, który Ci podesłałem, powinieneś zobaczyć coś w stylu 'string(8) "foo/bar/"'.

I wtedy jak wcześniej pobierałeś dane poprzez coś w stylu

  1. $go = $_GET['go'];
  2. $id = $_GET['id'];


Tutaj będziesz miał coś podobnego do:

  1. $path = $_SERVER['PATH_INFO']; // ścieżka, np. 'foo/bar/'
  2. $segments = explode('/', $path); // zamieniamy to na tablicę, np. array('foo', 'bar')
  3.  
  4. $go = $segments[0];
  5. $id = $segments[1];
  6.  
  7. // (czy jakoś inaczej)


Będziesz musiał poeksperymentować -- na tym polega programowanie...

PS. Daj znać, jeśli w ogóle nie działa (albo pokazuje się błąd 500) -- wtedy coś zepsułem w .htaccess
albectus
ok zaraz do tego się zabieram, a jesli to by mnie przerosło na tą chwile i chce zmienic ten .htaccess zeby mi wyswietlalo tak jak mialem napisane i z adresem z "-" i bez to co musze zmienic?
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.