Подтвердить что ты не робот

Переписать URL-адрес после перенаправления ошибки 404 htaccess

Поэтому я знаю, что это может показаться немного странным, но я ради последовательности, я бы хотел, чтобы все мои URL-адреса отображались в этой форме: http://domain.com/page/ До сих пор Я получил регулярные страницы, но я не могу заставить страницы ошибок работать должным образом.

Если пользователь посещает страницу или каталог, который не существует, я бы хотел, чтобы браузер перенаправлял: http://domain.com/404/ Этот каталог, однако, не будет фактически есть. Реальное местоположение страницы с ошибкой будет находиться под /pages/errors/ 404.php

Кроме того, хотя мне не нужен точный ответ для всех различных ошибок (400, 401, 403, 404, 500), я буду применять любой метод, чтобы перенаправить все это на их "правильный" URL ( например http://domain.com/400/ http://domain.com/500/ и т.д.)

Любые идеи?

4b9b3361

Ответ 1

Попробуйте это в своем .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 перенаправляет все 404s на определенный URL-адрес, все 500s на другой URL-адрес (замените ваш домен).

Правила перезаписи сопоставляют этот URL с вашим фактическим 404.php script. Регулярные выражения RewriteCond могут быть сделаны более универсальными, если вы хотите, но я думаю, вам нужно явно определить все коды ErrorDocument, которые вы хотите переопределить.

Локальный перенаправление:

Измените .htaccess ErrorDocument на существующий файл (должен существовать или вы получите сообщение об ошибке):

ErrorDocument 404 /pages/errors/404_redirect.php

404_redirect.php

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

Перенаправление на основе номера ошибки

Похоже, вам нужно указать строку ErrorDocument в .htaccess для каждой ошибки, которую вы хотите перенаправить (см. Apache ErrorDocument и Ошибка пользователя Apache). Пример .htaccess приведен в нескольких примерах. Вы можете использовать следующее в качестве общего перенаправления script для замены 404_redirect.php выше.

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;
?>

Ответ 2

Поместите этот код в ваш .htaccess файл

RewriteEngine On
ErrorDocument 404 /404.php

где 404.php - это имя файла и помещается в корень. Здесь вы можете указать полный путь.

Ответ 3

В вашем файле .htaccess, если вы используете apache, вы можете попробовать

Правило для страницы ошибки - 404

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

Ответ 4

Попробуйте добавить это правило в начало htaccess:

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

Затем под этим (или любыми другими правилами, которые у вас есть):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ http://domain.com/404/ [L,R]