Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6475
Последний выпуск: 19.06.2015

mod_rewrite: роботам - все, пользователю - только index!!

68K
14 февраля 2011 года
drawline
1 / / 14.02.2011
Впервые столкнувшись с mod_rewrite несколько дней назад уже запутался...
Задача:
Необходимо, чтобы:
- по любой внешней по отношению к mysite.ru ссылке (например, по ссылке в поисковике), указывающей на любой файл, кроме index, пользователь мог перейти только на index;
- при прямом наборе адреса пользователем на любой файл сайта mysite.ru, переход пользователя мог бы быть только на index;
- переход пользователя по внутренней ссылке, указывающей на любой файл, принадлежащий сайту mysite.ru, не вызывал бы редиректа на index;
- НО, необходимо!, чтобы поисковики могли видеть и индексировать все страницы и файлы сайта mysite.ru.

(сайт лежит в папке основного домена home/mysite).
CMS - отсутствует! Куки могут быть поставлены только в index!

(11.02.2011) придумал вот такой алгоритм, надеюсь корректный:
 
Код:
IF
     'пользователь'
    AND
     'ссылка не принадлежит mysite.ru'
THEN
    'перенаправить на index.htm'
ELSE
    'разрешить все файлы (только для поисковых роботов)'

Подскажите, плз, как написать такое на языке htaccess.

(13.02.2011) Вот, что получилось наворотить самостоятельно , похожее на мой алгоритм:
Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /

#условие "если ссылка не с mysite.ru":
RewriteCond ${HTTP_REFERER} !^www\.mysite\.ru* [NC,C,NS]
#или так?
RewriteCond ${HTTP_REFERER} !^\www.?\mysite\.ru* [NC,C,NS]

#проверка - пользователь или бот (главное - распознать usera):
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Opera.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Firefox.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Safari.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.* [NC]

#теперь правило - при выполнении условий выше направить на index:
Redirect 303 / http://www.mysite.ru
#или так?
RewriteRule ^(.*)$ index.php/$1 [R,L]
#синтаксис в предыдущем и следующих?
RewriteRule ^(.*)|(.*)\.(.*)$ http://www.mysite.ru/$1 [R=permanent,L]
#или так?
RewriteRule (.*) http://www.mysite.ru/$1 [R=permanent,L]

Поправьте, плз, если что-где не так (там бы еще клиентов, наверное, добавить бы?).

В коде 4 варианта перенаправления - какой оставить, как было бы правильно?.
+ корректность синтаксиса?

Насколько необходимо наличие флагов [C] и [NS] в первом условии?
Наличие флага [L] в конце правила влияет только на текущее правило?
можно ли будет после выполнения этого правила поставить еще правила?

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог