Понемногу осваиваю php и, как практика, знания постепенно применяю на сайте.
Адрес сайта Лукоянов.Ру. Понемногу развиваю движок для этого сайта по мере возможности.
В последнем обновлении добавил возможность статистики посетителей: когда, с какого ip и какую страницу посетили.
Оказалось, что наиболее частыми посетителями являются агенты поисковиков и они (раньше сайт был на Joomle) посещают для индексации ещё странички вида http://lukoyanov.ru/index.php/2009-09-12-1...0&Itemid=100029.
Такой странички, директорий нет и её надо сократить до http://lukoyanov.ru/index.php, переместить на главную страницу?
Или как агентам объяснить, что их нет и искать там нечего?
Возможно для этого нужно то то прописать в .htaccess.
С уважением, Сергей.
Спустя 10 минут, 44 секунды (14.08.2011 - 12:57) Xes написал(а):
Возможно, но помоему тема не втом разделе.
Цитата |
Возможно для этого нужно то то прописать в .htaccess. |
Помоему так оно и делатеся об этом куча всего в инете уже написано.
А это че рукописный движок? Помоему для постовых сайтов как ваш отлично подходит DLE
Спустя 7 минут, 6 секунд (14.08.2011 - 13:05) shyuser написал(а):
Цитата (Xes @ 14.08.2011 - 09:57) |
А это че рукописный движок? Помоему для постовых сайтов как ваш отлично подходит DLE |
Понимаю, использовал joomla. Потом начал изучать php и захотелось написать самому. Хорошая практика. Тем более делаю сайт один, поэтому особо никто не торопит.
А где эта куча написана, хоть ссылку киньте. Даже не знаю как запрос написать.
Спустя 4 минуты, 19 секунд (14.08.2011 - 13:09) Xes написал(а):
работа с htaccess
Спустя 29 минут, 7 секунд (14.08.2011 - 13:38) shyuser написал(а):
спасибо, но слишком обще. хочется, если не готового ответа, то более конкретного. до такого ответа я и сам уже давно дошёл.
Спустя 1 час, 20 минут, 49 секунд (14.08.2011 - 14:59) Белый Тигр написал(а):
Я бы составил регулярные выражения для определения нежелательных URL и в index.php встроил бы механизм проверки содержимого $_SERVER['REQUEST_URI']. Если вдруг оно совпадает с шаблоном ссылок оставшихся от Joomla, отсылал бы ответ с кодом 404
И через пару недель поисковики вообще бы забыли эти ссылки.
Можно, конечно, через htaccess. Например с помощью mod_rewrite отправлять на страницы с кодом 404, но это, наверное, сложнее будет в освоении и реализации, хотя в чём-то правильнее.
header("Status: 404 Not Found");
И через пару недель поисковики вообще бы забыли эти ссылки.
Можно, конечно, через htaccess. Например с помощью mod_rewrite отправлять на страницы с кодом 404, но это, наверное, сложнее будет в освоении и реализации, хотя в чём-то правильнее.
Спустя 5 минут, 35 секунд (14.08.2011 - 15:04) shyuser написал(а):
Белый Тигр
спасибо, попробую реализовать.
спасибо, попробую реализовать.
Спустя 4 часа, 17 минут, 18 секунд (14.08.2011 - 19:22) shyuser написал(а):
Написал вот такую функцию проверки:
И вызов в файле index.php
Возможно, что есть более простые варианты.
Спасибо за помощь. :)
P.S. Судя по статистике сайта агенты успокоились. :D
/*
Проверяем url на правильность иначе возвращаем false для переправления на 404
*/
function verify_url() {
$url = $_SERVER['REQUEST_URI'];
if (strlen($url) >= 11) {// url очень длинный
$url = substr($url,0,11);
if (($url == '/index.php?') || ($url == '/admin.php?')) { //url cоответствует правильному шаблону
return true;
}
else { //url не соответствует правильному шаблону
return false;
}
}
else { //url настолько короткий, что может быть только index.php или admin.php
if ((strlen($url) == 1) || ($url === '/index.php') || ($url === '/admin.php')) { //url cоответствует правильному шаблону
return true;
}
else { //url не соответствует правильному шаблону
return false;
}
}
}
И вызов в файле index.php
...
if (!verify_url()) { //проверяем URL на правильность, иначе 404
header('HTTP/1.1 404 Not Found');
header("Status: 404 Not Found");
exit('<h1>Error 404 Несуществующая страница.</h1><p>К сожалению, запрошенный Вами документ не существует. Возможно этот файл был удален или переименован.</p><p>А пока предлагаем Вам пройти на <a href="http://'.$_SERVER['HTTP_HOST'].'">первую</a> страницу. </p>');
}
...
Возможно, что есть более простые варианты.
Спасибо за помощь. :)
P.S. Судя по статистике сайта агенты успокоились. :D
Спустя 3 часа, 19 секунд (14.08.2011 - 22:22) Белый Тигр написал(а):
Лучше все проверки из verify_url() уместить в регулярное выражение, кода станет в разы меньше.
А кроме index.php и admin.php скриптов на сайте больше нет?
А кроме index.php и admin.php скриптов на сайте больше нет?
Спустя 34 минуты, 9 секунд (14.08.2011 - 22:56) shyuser написал(а):
Цитата |
Лучше все проверки из verify_url() уместить в регулярное выражение, кода станет в разы меньше. |
Увы, в составлении регулярных выражений пока слабоват.
Цитата |
А кроме index.php и admin.php скриптов на сайте больше нет? |
Есть, но они вызываются для сайта из index.php, для админки из admin.php, в зависимости от значения $_GET['mod'].
Спустя 1 час, 25 минут, 52 секунды (15.08.2011 - 00:22) Белый Тигр написал(а):
Мне или кажется из-за раннего утра, или этот код выдаёт 404 на любые URL кроме непосредственно "index.php" и "admin.php". Его работу хорошо тестировали?
Цитата |
Увы, в составлении регулярных выражений пока слабоват . |
Значит есть к чему стремиться
Спустя 6 часов, 16 минут, 56 секунд (15.08.2011 - 06:39) shyuser написал(а):
Цитата |
Мне или кажется из-за раннего утра, или этот код выдаёт 404 на любые URL кроме непосредственно "index.php" и "admin.php". |
У меня проблем нет. Позже попробую ещё на работе.
Цитата |
Его работу хорошо тестировали? |
Да тестировал. Сначала локально на Денвере. При этом функцию дополнял соответствующими выводами результата для проверки условий.
/*
Проверяем url на правильность иначе возвращаем false для переправления на 404
*/
function verify_url() {
$url = $_SERVER['REQUEST_URI'];
if (strlen($url) >= 11) {// url очень длинный
$url = substr($url,0,11);
if (($url == '/index.php?') || ($url == '/admin.php?')) { //url cоответствует правильному шаблону
echo 'url cоответствует правильному шаблону и >11';
return true;
}
else { //url не соответствует правильному шаблону
echo 'url не cоответствует правильному шаблону и >11';
return false;
}
}
else { //url настолько короткий, что может быть только index.php или admin.php
if ((strlen($url) == 1) || ($url === '/index.php') || ($url === '/admin.php')) { //url cоответствует правильному шаблону
echo 'url cоответствует правильному шаблону и <11';
return true;
}
else { //url не соответствует правильному шаблону
echo 'url не cоответствует правильному шаблону и <11';
return false;
}
}
}
В index.php и admin.php делал просто вызов данной функции:
verify_url();
Спустя 1 час, 56 минут, 7 секунд (15.08.2011 - 08:35) Белый Тигр написал(а):
А, всё. Не заметил сначала выражение
Ранее утро было, спал почти :)
$url = substr($url,0,11);
Ранее утро было, спал почти :)