Перенаправить 404 на другую страницу и захватить страницу с помощью .htaccess - PullRequest
0 голосов
/ 02 мая 2018

Хорошо, я хочу создать .htaccess, который перенаправит любую ошибку 404 на другую страницу при захвате пути / файла, к которому пытались получить доступ.

Итак, если они пытаются получить доступ

www.mydomain.com/xxx 

Я хочу, чтобы он был перенаправлен на

www.mydomain.com/error.php?e=xxx.  

Я никогда не был слишком хорош в написании файлов .htaccess, поэтому любая помощь, которую кто-то может оказать, была бы ЧУДЕСНОЙ.

Мне нужно, чтобы это работало по всему. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вам не нужен RewriteRule для достижения этой цели. Просто используйте директиву ErrorDocument.

Он будет обслуживать страницу, на которую вы ссылаетесь, но НЕ будет перенаправлять на нее. Если ваша ErrorDocument страница представляет собой php-скрипт, вы можете получить доступ к $_SERVER['REQUEST_URI'], чтобы узнать, какой ресурс был найден.

Итак, в основном вам нужно это в вашем файле .htaccess:

ErrorDocument 404 /error.php

А в error.php:

$notFound = $_SERVER['REQUEST_URI'];

Или любую переменную, в которой вы хотите сохранить этот URI.

Хорошо, что, поскольку пользователь не перенаправлен на страницу, простую опечатку легко исправить, чтобы перейти на нужную страницу, тогда как перенаправление заставит пользователя снова ввести весь URL-адрес (также он / она не сможет увидеть, что он / она пытался получить доступ).

С точки зрения аналитики, это все равно 404 без какого-либо дополнительного кода. Перенаправление на страницу с ошибкой вынудит вас добавить к ней дополнительный заголовок 404 (чтобы роботы не индексировали вашу страницу с ошибкой, между прочим).

В error.php убедитесь, что все пути ваших активов являются абсолютными, так как он может быть доставлен из http://www.example.com/xxx/yyy и будет искать относительные активы из /xxx/ (этот путь может не существовать). Таким образом, даже если error.php находится в корневой папке, использование src="img/404.png" не будет работать, как только у 404 будет папка в своем URI. Вы должны использовать src="/img/404.png".

0 голосов
/ 02 мая 2018

Вы можете использовать это правило в корне вашего сайта .htaccess:

RewriteEngine On

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# rewrite to error.php with a query parameter
RewriteRule .+ error.php?e=$0 [L,QSA]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...