Przepisz adres URL po przekierowaniu błędu 404 htaccess

Więc wiem, że może to wydawać się trochę dziwne, ale ze względu na spójność chciałbym, aby wszystkie moje adresy URL pojawiały się w tej formie: http://domain.com/page/ do tej pory udało mi się uruchomić zwykłe strony, ale nie wydaje mi się, aby strony błędów działały poprawnie.

Jeśli użytkownik odwiedza stronę lub katalog, który nie istnieje, chciałbym, aby przeglądarka twardego przekierowania do: http://domain.com/404 / ten katalog nie będzie jednak istniał. Prawdziwa lokalizacja strona błędu będzie pod /pages / errors / 404.php

Również, chociaż nie potrzebuję dokładnej odpowiedzi na wszystkie różne błędy (400, 401, 403, 404, 500), będę stosować dowolną metodę, aby przekierować wszystkie z nich do ich "właściwego" adresu URL (np. http://domain.com/400/ http://domain.com/500 / itd.)

Jakieś pomysły?

Author: LeinardoSmtih, 2013-11-13

4 answers

Spróbuj tego w swoim .htaccess:

.htaccess

ErrorDocument 404 http://example.com/404/
ErrorDocument 500 http://example.com/500/
# or map them to one error document:
# ErrorDocument 404 /pages/errors/error_redirect.php
# ErrorDocument 500 /pages/errors/error_redirect.php

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /pages/errors/404.php [L]

RewriteCond %{REQUEST_URI} ^/500/$
RewriteRule ^(.*)$ /pages/errors/500.php [L]

# or map them to one error document:
#RewriteCond %{REQUEST_URI} ^/404/$ [OR]
#RewriteCond %{REQUEST_URI} ^/500/$
#RewriteRule ^(.*)$ /pages/errors/error_redirect.php [L]

ErrorDocument przekierowuje wszystkie 404s do określonego adresu URL, wszystkie 500s do innego adresu url (zastąp swoją domeną).

Reguły przepisywania mapują ten adres URL do twojego rzeczywistego 404.skrypt php. Wyrażenia regularne RewriteCond mogą być bardziej ogólne, jeśli chcesz, ale myślę, że musisz wyraźnie zdefiniować wszystkie kody ErrorDocument, które chcesz zastąpić.

Local Redirect:

Zmiana .htaccess ErrorDocument to a file that exist (must exist, or you ' ll get an error):

ErrorDocument 404 /pages/errors/404_redirect.php

404_redirect.php

<?php
   header('Location: /404/');
   exit;
?>

Przekierowanie na podstawie numeru błędu

Wygląda na to, że będziesz musiał podać ErrorDocument linię w .htaccess dla każdego błędu, który chcesz przekierować (zobacz: Apache ErrorDocument i Apache Custom Error ). .powyższy przykład htaccess zawiera wiele przykładów. Możesz użyć poniższego jako ogólnego skryptu przekierowania do zastąp 404_redirect.php powyżej.

Error_redirect.php

<?php
   $error_url = $_SERVER["REDIRECT_STATUS"] . '/';
   $error_path = $error_url . '.php';

   if ( ! file_exists($error_path)) {
      // this is the default error if a specific error page is not found
      $error_url = '404/';
   }

   header('Location: ' . $error_url);
   exit;
?>
 44
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-16 01:48:27

Umieść ten kod w swoim .plik htaccess

RewriteEngine On
ErrorDocument 404 /404.php

Gdzie 404.php to nazwa pliku i umieszczona w katalogu głównym. Możesz umieścić pełną ścieżkę tutaj.

 9
Author: Ashwani Panwar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-02 07:20:14

Spróbuj dodać tę regułę do top twojego htaccess:

RewriteEngine On
RewriteRule ^404/?$ /pages/errors/404.php [L]

Następnie na podstawie tego (lub innych zasad, które masz):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ http://domain.com/404/ [L,R]
 2
Author: Jon Lin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 19:46:30

W Twoim .plik htaccess, jeśli używasz apache możesz spróbować z

Reguła strony błędu-404

ErrorDocument 404 http://www.domain.com/notFound.html

 1
Author: ElMusa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 19:44:11