![]() |
Как инициировать ошибку 404?
Помогите придумать:
Как можно заставить апач отработать условие в htaccess по обработке ошибки 404, если вызван файл, который реально существует? Т.е. есть некий адрес http://server.ru/folder/ там реально лежит файл index.php, который работает, проверяет какие-то условия и при определённых условиях должна показаться заранее сделанная страница об ошибке 404. Причём редиректить на эту страницу не пойдёт: в строке адреса должен остаться тот адрес, что набрали. Этот редирект должен сделать апач, согласно своим правилам. |
Любое правило изначально работает для всех файлов, независимо от их существования. А если очень хочется задействовать ErrorDocument, то можно написать реврайт на заведомо несуществующий файл.
|
Тогда в строке адреса будет торчать этот несуществующий файл...
|
Self Author
>Тогда в строке адреса будет торчать этот несуществующий файл... RaZEr грит про реврайт, а не редирект. А еще тут глянь: http://ru.php.net/header (про 404 там есть) |
Цитата:
А ссылка не открывается... |
Self Author
>Про реврайт не знаю ничего. Где об этом можно посмотреть? Да ладно, а это чья тема? >А ссылка не открывается... Зайди на php.net и в поиске набери header. |
Цитата:
Я думал что другое... Так как этот реврайт мне поможет? Откуда htaccess узнает, что какой-то скрипт решил закосить под несуществующий? |
Self Author
>Откуда htaccess узнает, что какой-то скрипт решил закосить под несуществующий? Тогда сам скрипт пусть думает косить ему иль нет => http://ru.php.net/header |
Цитата:
|
Self Author
Я вот не пойму, а что мешает скрипту нарисовать свою страницу 404? |
Всё дело в "цене" вопроса. Есть вариант: редирект на некий nopage.htm, после которого будет показана страница 404. Минус - светится этот nopage.htm. А теперь, чтобы от этого избавится, нужно что-то сделать. И чем больше всего надо делать, тем "дороже" становится это решение. Скрипты анализируют URI, которым были вызваны, от этого показывают что-то по-разному. И это получается как бы "правило". Для того, чтобы каждый из этих скриптов мог сделать свою страницу 404, нужно писать "исключение", соизмеримое с этими правилами. А это делать не хочется.
Спасибо всем, кто предлагал решения. Жаль, что "красивого" решения нет. |
Может так:
.htaccess: Код:
ErrorDocument 404 /404_err.phpКод:
<? |
Hubbitus!
Header - это сообщение от сервера браузеру. А мне нужно, чтобы сервер повёл себя так, будто файла нет. |
Self Author
Объясни, пожалста, внятно и понятно что нужно и чем тебя не устраивают вышеописанные варианты. |
Цитата:
Цитата:
|
Self Author
Допустим, у нас есть вот такая запись в нашем htaccess: ErrorDocument 404 /error.php Первой строкой в error.php отдаём заголовок (как уже писал Hubbitus): header("HTTP/1.0 404 Not Found"); Далее выводим сообщение аля страница не найдена. Теперь дописываем rewrite-ы: RewriteEngine on RewriteRule урл_для_404 /error.php |
Цитата:
|
Sam Dark, чего-то я тебя не понял. Ну выдали мы 404 из скрипта, дальше-то что? Реврайты твои не сработают же, потому как скрипт запущен index.php, и он выдаст браузеру именно то что в нем напишешь, после этого заголовка.
Как вариант с реврайтом, можно вместо вызова virtual в моем примере, сделать попробовать переадресацию на какой-то несуществующий элемент, и его уже реврайтом перезаписать по желанию. |
Цитата:
|
Цитата:
|
Цитата:
|
А почему нет? Я пробовал править htaccess на ходу скриптом - всё в норме. Если надо - поделюсь классом для этого дела.
|
Цитата:
У меня другой вопрос: Вот я подправил htaccess в тот момент, когда мне это потребовалось. 1. Как теперь заставить, чтобы это вступило в силу? Перезапустить скрипт хидером? 2. Всё отработалось, апач сделал своё дело. Как потом заставить какой-нибудь скрипт вернуть старый htaccess нлазад? Или Вы делали постоянные изменения, не временные? |
Вообще я делал постоянные изменения.
Почитал ещё пару раз первый пост. Думаю, что про редиректы и mod_rewrite всё немного сложно... Лучше сделать что-то вроде: PHP код:
|
| Часовой пояс GMT +4, время: 07:32. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.