Имхо, это фигня. Никто не помешает запилить такую ссылку на любом ресурсе, где посетителей больше чем админов на порядки. А как же новостные порталы? Их банить за новости о том, что где-то накрыли студию детской порнографии, потому что у них эти слова попали в заголовок и адрес? Соль в том, что 404 пугает юзверя. Его вообще пугает все неожиданное и непонятное. А 404 даже сегодня что-то странное и пугающее. Как вариант можно отдавать 404 с JS-ом, который перенаправит браузер на индекс. А поисковую систему не перенаправит, потому что пауки не могут в JS.
Ты походу не вкурил схему. Ссылка с ключами в урле ведёт на страницу с кодом 200. И всё. Это приговор. Должно быть 404 если страницы нет. Если 200 то значит ссылка правильная и отдан тот контент, который запрошен - гей-порно с котиками.
404 страница не обязана быть пустой. Чтобы не пугать юзера, можно показывать страницу в дизайне сайта. Главное, чтобы в заголовке был Not Found.
И что мешает туда закинуть JS-ку, которая сделает перенаправление на индекс уже со стороны клиента? Для паукана там будет код 404 и нот фаунд. Для клиента там будет индекс.
Такая страница не была найдена, к моменту, когда вы дочитаете сообщение, вы будете перенаправлены на главную.
У меня PHP 5.3... Эта функция, наверное, самый простой вариант. Спасибо всем! А почему не катит вариант с перенаправлением на несуществующую страницу 404.html? Из за статуса 302?
Это, скорее всего, статус по умолчанию, который где-то хранится... Исправить бы его, временно, а затем снова установить. Заголовок Apacha, который он шлет или пхп-шный?
Вообще, если это можно сделать только через конфиг Apacha (он же лог-то ведёт), то и смысла нет: хостеры не дадут, скорее всего, этим воспользоваться... Добавлено спустя 2 минуты 25 секунд: Придётся после этого ещё и exit; дописывать, оставаясь при этом на запрошенном адресе...
Да, exit() - это очень сложная функция. А можно и не прописывать, а просто вывести, что нужно при несуществующей странице
В смысле параметров?... Нужно почитать, наверное. Добавлено спустя 20 минут 6 секунд: Вот рабочий вариант: В скрипте: Код (Text): if(!isset($apps[$words[0]])) { header('Refresh:0; /QUERY_ERRORS.php',false,'404'); exit; } Результат в access.log Код (Text): 127.0.0.1 - - [01/Oct/2014:21:10:39 +0400] "GET /bla-bla-bla HTTP/1.1" 404 138 127.0.0.1 - - [01/Oct/2014:21:10:39 +0400] "GET /QUERY_ERRORS.php HTTP/1.1" 200 266 127.0.0.1 - - [01/Oct/2014:21:10:56 +0400] "GET /favicon.ico HTTP/1.1" 404 138 127.0.0.1 - - [01/Oct/2014:21:10:56 +0400] "GET /QUERY_ERRORS.php HTTP/1.1" 200 266 Если в 404.php теперь сделать Refresh с задержкой на пару секунд, то можно возвращаться на индекс автоматом. Ваше мнение - стоит ли?..
Зачем затылок через попу чесать? Код (Text): if(!isset($apps[$words[0]])) { header("HTTP/1.0 404 Not Found"); require("404.php"); die; } Всё ))
Чтобы не оставаться на запрошенном адресе, которого не существует. Можно Refresh-нуть со страницы ошибок на индекс.
Зачем? Дайте пользователю полюбоваться, что он не туда попал, а он, не дурак уж, нажмёт на домик Добавлено спустя 1 минуту 26 секунд: Вот такую ситуацию мне один хороший сеошник заказывал исправлять в CMS... И так хотите перебросить пользователя на индекс - есть ещё meta refresh в html
А что плохого в том, что страница ошибки найдена?.. Кстати, если в 404.php написать перенаправление на главную через хедер локатион (рефреш результатов не даёт), то результат такой: Код (Text): 127.0.0.1 - - [01/Oct/2014:23:08:06 +0400] "GET /favicon.ico HTTP/1.1" 404 138 127.0.0.1 - - [01/Oct/2014:23:08:06 +0400] "GET /QUERY_ERRORS.php HTTP/1.1" 302 - 127.0.0.1 - - [01/Oct/2014:23:08:06 +0400] "GET / HTTP/1.1" 200 213 Это не нормально?.. Вроде выдаёт статус 404 для запршенной, затем редирект и статус ОК для индекса... Пусть уж пользователь на Главную любуется, мож чего полезного для себя найдёт... Если разобраться логически, то вроде всё в норме. 404.php можно, например, переименовать в QUERY_ERRORS.php... Для наглядности, так сказать. Ресурс не найден - да и всё.
Вот немного другой вариант: QUERY_ERRORS.php: Код (Text): header("HTTP/1.1 404 Not Found"); header('Refresh:0; http://mysite'); access.log: Код (Text): 127.0.0.1 - - [02/Oct/2014:00:03:20 +0400] "GET /bla-bla-bla HTTP/1.1" 404 138 127.0.0.1 - - [02/Oct/2014:00:15:12 +0400] "GET /QUERY_ERRORS.php HTTP/1.1" 404 - 127.0.0.1 - - [02/Oct/2014:00:03:20 +0400] "GET / HTTP/1.1" 200 213 Меня интересует вот эта строка: Код (Text): 127.0.0.1 - - [02/Oct/2014:00:15:12 +0400] "GET /QUERY_ERRORS.php HTTP/1.1" 404 - Какой правильный статус в ней должен быть: 200, 404 или какой другой?.. Добавлено спустя 25 минут 48 секунд: Вариант без использования дополнительного файла ошибок: Код (Text): if(!isset($apps[$words[0]])) { header("HTTP/1.0 404 Not Found"); header('Refresh:0; '.DIRECTORY_SEPARATOR); // Или на любую другую нужную страницу exit; } Результат в access.log: Код (Text): 127.0.0.1 - - [02/Oct/2014:00:30:00 +0400] "GET /bla-bla-bla HTTP/1.1" 404 138 127.0.0.1 - - [02/Oct/2014:00:30:00 +0400] "GET / HTTP/1.1" 200 213 127.0.0.1 - - [02/Oct/2014:00:30:25 +0400] "GET /favicon.ico HTTP/1.1" 404 138 127.0.0.1 - - [02/Oct/2014:00:30:25 +0400] "GET / HTTP/1.1" 200 213 127.0.0.1 - - [02/Oct/2014:00:30:58 +0400] "GET /no_such_file.php HTTP/1.1" 404 138 127.0.0.1 - - [02/Oct/2014:00:30:58 +0400] "GET / HTTP/1.1" 200 213 .htaccess Код (Text): RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} ^/$|^/index.php$ RewriteRule ^.*$ index.php?words=индекс [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?words=$1 [L,QSA] Работает для любого не найденного файла или каталога. Последний вариант - допустим?.. Можно использовать? Гуру, подскажите!
Фиг знает, на 95% сайтов к норм страницам приписать и вот те viewtopic.php?f=13&t=50187&start=30&article=%B2%D0%B8%D0%B4%D0%B5%D0%BE%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D1%8C%20%D1%81%D0%BC%D1%81%203333 HTTP 200