Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przyjazne linki i PATH_INFO
Forum PHP.pl > Forum > Przedszkole
desavil
Witam,
Chciałem zrobić takie rozwiązanie, że w pliku .htaccess mam tylko jeden wpis:
  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteRule (.*) index.php/$1 [L]

A resztę już sobie przez PHP ustalam jeżeli chodzi o przyjazne linki. Zawartość pobieram za pomocą: $_SERVER['PATH_INFO'] oraz odpowiednio formatuje dane:
  1. $site_page = explode('/' ,$site_patchinfo);
  2. $site_page2 = explode('-' ,$site_patchinfo);

$site_page[0] odpowiada zawsze za includowany plik podstrony. Linki są w formie, np.
adrestrony.pl/kontakt
adrestrony.pl/newsy/12
adrestrony.pl/zarzadzaj-4312/usun
itp.

Chodzi mi o to, że mam problem w moim skrypcie z zrobieniem stron błędów (404) jeżeli dana podstrona nie zostanie odnaleziona.
Przypuśćmy ktoś wpisze:
adrestrony.pl/kontakt/costamcostam/12-12
Taki link u niego przejdzie, bo skrypt sprawdza jedynie czy plik o nazwie "kontakt" istnieje, a później do tego pliku jeżeli są potrzebne odpowiednie parametry dodatkowe to są pobierane z linka. Czy mogę jakoś zrobić, aby wyświetlać stronę błędu? Czy muszę koniecznie zdefiniować w PHP listę plików/podstron?
A może po prostu w .htaccess robić wszystkie linki, chociaż wydawało mi się w taki sposób to prostrze aby za każdym razem linka nie wpisywać, ale te strony błędów... a koniecznie chcę je mieć.

Pozdrawiam! Dziękuję za propozycje.
Lorum3
Rozwiązanie w którym sprawdzasz tylko pierwszy parametr mija się z celem.

Logicznie będzie gdy pierwszy parametr będzie kontrolerem, drugi akcją i wtedy również sprawdzasz czy dana akcja istnieje. W przypadku braku czegokolwiek wszystko przekierowujesz na stronę główną, bądź 404.
desavil
Mógłbym prosić o jakiś przykład takiego kontrolera, lub poprawę poniższego?
Chodzi o to, abym mógł w nim dzielić zarówno przez "/" oraz "-"

Natomiart strony errorów będą miały taką postać:
adrestrony.pl/error-404
adrestrony.pl/error-500

error jest to kontroler, a numer po "-" akcją.

Na chwilę obecną wymyśliłem takie coś:
  1. $tpl_site = 'site.tpl';
  2. $site_patchinfo = $validate -> isUrl_patchinfo($_SERVER['PATH_INFO']);
  3. if(!empty($site_patchinfo)){
  4. $site_page = explode('/' ,$site_patchinfo);
  5. $site_page2 = explode('-' ,$site_patchinfo);
  6. $site_page2_id = $validate -> isNumber($site_page2[1]);
  7. if($site_patchinfo != false && file_exists(SITE_PAGES_DIR.basename($site_page[1]).'.php') && file_exists(TPL_TEMPLATE_DIR.basename($site_page[1]).'.tpl') && $site_page[1] != 'index'){
  8. if($site_page2[0] == 'error' && !empty($site_page2_id)){ $tpl_page = 'includes/error'; $tpl_site = 'error.tpl'; }else{ $tpl_page = $site_page[1]; $tpl_template = $site_page[1]; }
  9. }else{ header('Location: /error-404'); }
  10. }else{ $tpl_template = 'index'; }
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.