IF
'пользователь'
AND
'ссылка не принадлежит mysite.ru'
THEN
'перенаправить на index.htm'
ELSE
'разрешить все файлы (только для поисковых роботов)'
mod_rewrite: роботам - все, пользователю - только index!!
Задача:
Необходимо, чтобы:
- по любой внешней по отношению к mysite.ru ссылке (например, по ссылке в поисковике), указывающей на любой файл, кроме index, пользователь мог перейти только на index;
- при прямом наборе адреса пользователем на любой файл сайта mysite.ru, переход пользователя мог бы быть только на index;
- переход пользователя по внутренней ссылке, указывающей на любой файл, принадлежащий сайту mysite.ru, не вызывал бы редиректа на index;
- НО, необходимо!, чтобы поисковики могли видеть и индексировать все страницы и файлы сайта mysite.ru.
(сайт лежит в папке основного домена home/mysite).
CMS - отсутствует! Куки могут быть поставлены только в index!
(11.02.2011) придумал вот такой алгоритм, надеюсь корректный:
Код:
Подскажите, плз, как написать такое на языке 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]
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] в конце правила влияет только на текущее правило?
можно ли будет после выполнения этого правила поставить еще правила?