.htaccess, błąd 404 i skrypty PHP

chciałbym zrobic ładne linki w moim serwisie, ale jednocześnie pozwolic dalej na normaly sposób wywoływania skryptów

chciałbym tak zapisac plik .htaccess aby wszystkie skrypty php wykonywały się normalnie, tz. jeżeli w danym folderze istnieje dany plik PHP to powinien się wykonac, a nie wiem jak to zrobic

jeżeli nie istnieje to powinna się wywołac obsluga błędu, np. e404.php, skrypt ten powninen zbadac wywolaną ścieżkę i na tej podstawie wywołac odpowieni skrypt lub wyświetlic 404, a nie wiem jak przekazac do tego skryptu url, bo $_SERVER['REQUEST_URI'] daje mi e404.php, a nie oryginalny url

czy da się to zrobic? czy też powinienem wszystkie zapytania wysłac do jakiegoś głównego skryptu, który będzie sprawdzał istnienie pliku i wykonwyał lub ewentualnie wybierał na podstawie podanego url co uruchomic - to umiem, ale wydaje mi się, że można prościej, tz. z pliku .htaccess zrobic to wszystko

1 rok, 12 miesięcy temu | edytowane przez: raphpl 13371727

  • Proponuję zrobić to tak: Wszytko co nie jest istniejącym plikiem lub katalogiem kierować za pomocą .htaccess na index.php

    RewriteCond $1 !^(index\.php)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    

    I już w php obsłużyć żądanie. Jeśli podany adres jest błędny - czytaj nie wskazuje właściwego zasobu to należy zwrócić stosowny komunikat poprzedzony nagłówkiem 404

    <?php
    header("HTTP/1.0 404 Not Found");
    echo 'Podana strona '.$_SERVER['REQUEST_URI'].' nie istnieje.';
    die;
    ?>
    

  • Jeżeli dobrze rozumiem to Twój problem polega na tym, że nie wiesz jak przekazać do pliku e404.php informacji o tym jakiego pliku nie było. Aby to zrobić mozesz użyć dodatkowe zmienne jakie przekazuje Apache do skryptu błędu w czasie kiedy dany plik nie istnieje. Nazwa tego pliku znajduje się w REDIRECT_URL. Tutaj masz dokumentację zmiennych.

    Czyli w htaccess piszesz:

    ErrorDocument 404 e404.php
    

    A więc w e404.php zamiast $_SERVER['REQUEST_URI'] użyj:

    $_SERVER['REDIRECT_URL']
    

    Jeżeli potrzebujesz więcej objaśnień w przejrzystej formie to polecam ten artykuł.

    Powinieneś nacisnąć kciuk do góry jeżeli ta informacja pomogła Ci, z góry dziękuję.

  • A może nie lepiej po prostu spytać się o to w mailu do pomocy Twojego hostingu? Najczęściej mają rozwiązania typu 404.php, 404.html jako defaultowo ładowane przy różnych błędach.

    Możesz zrobić to efektywnie w php, łapiąc wszystkie adresy do index.php, a stamtąd próbować includować odpowiedni plik - jeśli się nie da, łapiesz wyjątek i go obsługujesz.

Zaloguj się, aby dodać swoją odpowiedź