Как передать 404-й URL-адрес моей странице 404.html с помощью .htaccess
Например, если я посещаю неверную страницу: /user/123
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d ErrorDocument 404 /?404.php?error_path={???} ^ =========================================^
Результатом перенаправления 404 на /404.php?error_path=/user/123
ErrorDocument
не является частью mod_rewrite, и это ErrorDocument
. Это то, что вы ищете?
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d Rewriterule ^(.*) /404.php?error_path=$1 [R=301,L]
Вы не можете добавить путь к сайту, который переместил ошибку в URL-адрес отображаемой страницы ошибки с помощью директивы ErrorDocument. Однако при работе с PHP вы можете использовать глобальное значение $_SERVER["REDIRECT_URL"]
из сценария обработки ошибок.
Дополнительную информацию см. В http://httpd.apache.org/docs/current/custom-error.html#variables :
Перенаправление на другой URL-адрес может быть полезным, но только в случае передачи некоторой информации, которая затем может использоваться для более четкого объяснения или регистрации условия ошибки.
Для этого, когда отправляется переадресация ошибок, будут установлены дополнительные переменные среды, которые будут сгенерированы из заголовков, предоставленных исходному запросу, добавив «REDIRECT_» в исходное имя заголовка. Это дает документу ошибки контекст исходного запроса.
Например, вы можете получить в дополнение к более обычным переменным окружения следующее.
REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/jpeg, image/png REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8 REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin REDIRECT_QUERY_STRING= REDIRECT_REMOTE_ADDR=121.345.78.123 REDIRECT_REMOTE_HOST=client.example.com REDIRECT_SERVER_NAME=www.example.edu REDIRECT_SERVER_PORT=80 REDIRECT_SERVER_SOFTWARE=Apache/2.2.15 REDIRECT_URL=/cgi-bin/buggy.pl
.REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/jpeg, image/png REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8 REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin REDIRECT_QUERY_STRING= REDIRECT_REMOTE_ADDR=121.345.78.123 REDIRECT_REMOTE_HOST=client.example.com REDIRECT_SERVER_NAME=www.example.edu REDIRECT_SERVER_PORT=80 REDIRECT_SERVER_SOFTWARE=Apache/2.2.15 REDIRECT_URL=/cgi-bin/buggy.pl
Переменные среды REDIRECT_ создаются из переменных среды, существовавших до перенаправления. Они переименовываются с префиксом REDIRECT_, т. Е. HTTP_USER_AGENT становится REDIRECT_HTTP_USER_AGENT.
REDIRECT_URL, REDIRECT_STATUS и REDIRECT_QUERY_STRING гарантированы, и другие заголовки будут установлены только в том случае, если они существовали до условия ошибки.
Ни один из них не будет установлен, если целью ErrorDocument является внешнее перенаправление (что-то начинается с имени схемы, такого как http :, даже если оно относится к тому же хосту, что и сервер).
На apache 2.4 и более поздних версиях вы можете использовать переменные mod-rewrite с директивой ErrorDocument:
ErrorDocument 404 /404.php?uri=%{REQUEST_URI}
Это внутренне отправит 404 uri на вашу страницу 404.php, и вы сможете манипулировать им, используя следующий код в 404.php
<?php echo "the broken uri is $_GET['uri']"; ?>