Впервые столкнувшись с mod_rewrite несколько дней назад уже запутался...
Задача:
Необходимо, чтобы:
- по любой внешней по отношению к mysite.ru ссылке (например, по ссылке в поисковике), указывающей на любой файл, кроме index, пользователь мог перейти только на index;
- при прямом наборе адреса пользователем на любой файл сайта mysite.ru, переход пользователя мог бы быть только на index;
- переход пользователя по внутренней ссылке, указывающей на любой файл, принадлежащий сайту mysite.ru, не вызывал бы редиректа на index;
- НО, необходимо, чтобы поисковики могли видеть и индексировать все страницы и файлы сайта mysite.ru.
(сайт лежит в папке основного домена home/mysite).
(11.02.2011) придумал вот такой алгоритм, надеюсь корректный:
Подскажите, плз, как написать такое на языке htaccess.
(13.02.2011) Вот, что получилось наворотить самостоятельно , похожее на мой алгоритм:
Поправьте, плз, если что-где не так (там бы еще клиентов, наверное, добавить бы?).
В коде 4 варианта перенаправления - какой оставить, как было бы правильно?.
+ корректность синтаксиса?
Насколько необходимо наличие флагов [C] и [NS] в первом условии?
Наличие флага [L] в конце правила влияет только на текущее правило?
можно ли будет после выполнения этого условия поставить условие для запрета mail-ботов?
...и не только?
Задача:
Необходимо, чтобы:
- по любой внешней по отношению к mysite.ru ссылке (например, по ссылке в поисковике), указывающей на любой файл, кроме index, пользователь мог перейти только на index;
- при прямом наборе адреса пользователем на любой файл сайта mysite.ru, переход пользователя мог бы быть только на index;
- переход пользователя по внутренней ссылке, указывающей на любой файл, принадлежащий сайту mysite.ru, не вызывал бы редиректа на index;
- НО, необходимо, чтобы поисковики могли видеть и индексировать все страницы и файлы сайта mysite.ru.
(сайт лежит в папке основного домена home/mysite).
(11.02.2011) придумал вот такой алгоритм, надеюсь корректный:
Код:
IF
'пользователь'
AND
'ссылка не принадлежит mysite.ru'
THEN
'перенаправить на index.htm'
ELSE
'разрешить все файлы (только для поисковых роботов)'
(13.02.2011) Вот, что получилось наворотить самостоятельно , похожее на мой алгоритм:
Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond ${HTTP_REFERER} !^www\.mysite\.ru* [NC,C,NS]
#или так?
RewriteCond ${HTTP_REFERER} !^\www.?\mysite\.ru* [NC,C,NS]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.* [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]
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] в конце правила влияет только на текущее правило?
можно ли будет после выполнения этого условия поставить условие для запрета mail-ботов?
...и не только?