![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Хочу реализовать внутри кода возможность направления пользователя на страницу с ошибкой, скажем в ответ, на то что он ввел несуразные параметры в строке адреса.
Возьмем самый простой случай, например, адрес форма PHP выглядит так: http://forum.vingrad.ru/forum/php-basics.html если пользователь вводит http://forum.vingrad.ru/forum/blah-blah-blah.html я хочу его автоматически перенаправить на страницу 404-й ошибки. Изначально я планировал это сделать примерно так:
Но браузер почему-то на этот заголовок никак не реагирует (никакого output'а до этого заголовка не происходит) Может у меня что-то не так настроено в Apache? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
getme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 12.9.2008 Репутация: -2 Всего: -2 |
а как браузер должен реагировать? вывести страницу 404 на этот заголовок?
|
|||
|
||||
unicross |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 21 Всего: 53 |
Royan, в файл .htaccess достаточно добавить директиву обработки ошибки 404 и перенаправить на страницу обработки.
|
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Royan, насколько я понимаю, апач думает что страница таки найден (ведь так и есть) и не анализирует хедеры которые вы отдаете. Дефолтная же страница ошибки показывается именно вебсервером, а не браузером. Соответственно, ваш скрипт работает корректно (чтобы убедится проверте с пом. прокси или того же TamperData). Останось только отдать контент страницы ошибки.
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
да, но страница 404 зависит от типа браузера. если давать свой контент, то это будет просто сообщение об ошибке.
а можно ли как-то без использования директив .htaccess заставить выдать ошибку 404? |
|||
|
||||
ZlojEzh |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 10 Всего: 15 |
не совсем так обычно браузеры получая какой-либо контент после заголовка 404, отображают его (некоторые проблемы с этим есть у ие, ему, кажется, требуется определенный размер контента) а для того, чтобы отдать нужный заголовок, даже если он уже был ранее установлен, нужно указать доп. параметры
|
||||
|
|||||
unicross |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 21 Всего: 53 |
Обычно ошибку 404 обрабатывают, а не генерируют... Отправьте клиента на неработающий ресурс ![]()
ZlojEzh, У меня этот код
без проблем меняет заголовок ответа сервера.
|
||||||||
|
|||||||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
ИЕ6 и опера проглотили, а ФФ выдаёт чистую страницу в том то и дело, что обычно. а вот как сделать именно так как мне требуется? тогда клиент увидит переадресацию фишка именно в симуляции настоящей ошибки 404, чтобы интервент, вздумавший поиграться с адресами увидел фигу, но думал, что это не я ему показываю, а что там просто ничего нет. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
не "проглотили", а показали "friendly error pages". в MSDN читал статью, что, мол, если длина контента страницы с ошибкой(500, 404, 403 и тыды) короче некоего размера, то показывается собственный(браузерный) вариант страницы. Естественно, если на сгенерированной сервером были какие-то дополнительные опции, типа списка ссылок на похожие страницы(для чего, собственно, удобнее использовать динамику с РНР и отдачей заголовка, чем статику на HTML), то браузер со своими "дружественными" страницами подкладывает свинью и разработчику, и конечному пользователю. И отменить такую обработку можно, только "отдавая страницу достаточной длины". Добавлено через 2 минуты и 17 секунд
так точно. причем в MSDN указания конкретного минимального размера я не нашел :( |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
то есть чисто из пхп это невозможно?
а путём сервера? имеется ввиду опять же, не обработка и выдача своей страницы, а именно чистая симуляция 404 (обман браузера) |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
что "невозможно"? отдать заголовки "404 Not found"? Да ради Бога - отправляются они. и принимаются. Почему в Firefox не выводится браузерная "friendly error page" - не знаю(и хорошо: хоть один браузера регирует вменяемо). Поищи адреса, по которым выводится браузераная страница ошибки, а не собственная страница сайта. Подсмотри в заголовки. Может, там надо ещё Content-Length: 0, чтоб был. Или ещё чего. И отправь такие же заголовки на своем сайте. |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
bars80080, да что значит "невозможно"? Невозможно вместе с статусом отдать некоторую страницу на которой будет сказано что страница не найдена? Клиенту по большому счету плевать на статус страницы -- ему важен контент, который он увидит. Стастуы в большей степени для поисковиков нужны. И, если клиент увидит не дефолтную браузерную "Not found", а некую другую (например http://yandex.ru/sdfsd), то в этом нет ничего страшного
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
bars80080 |
|
||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
хм, сейчас в самом деле вляделся в content-length, оказалось, что в случае реально не существующей страницы сервер присылает 288 байт, содержащие:
, которые в ФФ отображаются, а в ИЕ и опере подставляется собственный вариант соответственно мне надо выкидывать этот текст спасибо
Добавлено через 1 минуту и 7 секунд
раньше думал, что сервер сам ещё добавляет заголовков и как-то обозначает, что страница всё же найдена. ан нет оказывается |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |