Как закрыть страницу от индексации?

Т
На сайте с 16.01.2005
Offline
53
979

Нужно закрыть от индексации страницу site.ru/index.php,

при этом не должны закрыться site.ru/index.php?бла=бла.

можно даже не закрывать, а просто сделать ее отличной от site.ru или редирект с нее на site.ru поставить (пробовал, не получилось).

Кто-нибудь может посоветовать что-нибудь полезное?

Коля Дубр
На сайте с 02.03.2005
Offline
153
#1

С тех пор как я научился использовать mod_rewrite, я пользуюсь именно им для подобных задач. Если index.php без параметров не имеет смысла, можно так и написать:


<?
if (!isset($_GET['bla'])) {
header("HTTP/1.1 404 Not Found");
}
?>
Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
Т
На сайте с 16.01.2005
Offline
53
#2
Коля Дубр:
С тех пор как я научился использовать mod_rewrite, я пользуюсь именно им для подобных задач. Если index.php без параметров не имеет смысла, можно так и написать:

<?
if (!isset($_GET['bla'])) {
header("HTTP/1.1 404 Not Found");
}
?>

Только скрипт сработает в двух случаях site.ru/index.php и site.ru

во втором случае должна выдаваться главная страница, а не ошибка.

Коля Дубр
На сайте с 02.03.2005
Offline
153
#3

По-хорошему, RTFM.

Из личного опыта могу посоветовать сохранить где-нибудь вот такой файлик:


<?
foreach($_SERVER as $key => $value) {
echo "\$_SERVER[".$key."] = ".$value."<br>";
}
?>

Запускаем, внимательно изучаем, в какой из переменных окружения лежит то, что нам нужно. Оказывается, в REQUEST_URI. Отсюда мораль:


<?
if (preg_match("/index.php/", $_SERVER['REQUEST_URI'])) {
header("HTTP/1.0 404 Not Found");
} else {
echo "Welcome!";
}
?>

Еще вариант - опять же, при помощи mod_rewrite, в .htaccess пишем:


RewriteEngine on
RewriteBase /root/
RewriteCond %{THE_REQUEST} ^.*index.php.*$
RewriteRule ^index.php$ /root/ [R]

Если мы обращаемся к папке /root/index.php - происходит перенаправление на /root/. По умолчанию используется 302 редирект, но можно подставлять и другие коды, посредством конструкции [R=301], например. Можно заменить [R] на [F], тогда будет отдаваться 403 ошибка, можно использовать флаг [G], тогда будет отдаваться страшный 410 заголовок "Gone", т.е. страница умерла, а редиректа нет и не будет.

Как отдавать 404 код я, честно говоря, не понял. Вот в этой статье http://podolsk.newcontinent.ru/p67.htm предлагают использовать

RewriteRule ^.*$ - [R=404]

но у меня такая штука выдает ошибку сервера (что вполне логично). Если кто-нибудь найдет решение, буду очень благодарен.

PS. А кто мне за предыдущий пост репутонов снял? Чего не так-то?

Т
На сайте с 16.01.2005
Offline
53
#4

такой файлик сохранять не нужно, все проще phpinfo() :)

насчет REQUEST_URI вы правы, похоже я его просто не заметил в phpinfo()

Мод_реврайт конечно круче, вот только у меня на сервере его нет :(

насчет репутонов я только поднимал, может ошибся =)

сейчас исправим ;-)

Т
На сайте с 16.01.2005
Offline
53
#5

не хочет :(

Вы должны добавить отзыв кому-то еще, прежде чем сможете снова добавить ее Коля Дубр.

Добавлял все равно не хочет, будем надеяться что это не я его понизил. =)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий