301 редирект и redirect loop

Главные вкладки

Аватар пользователя patison@drupal.org patison@drupal.org 28 февраля 2010 в 2:24

Чё-то не пойму никак в чём-же проблема ...
Раскомментил в .htaccess строки для редиректа с http://site.ru на http://www.site.ru:

RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [L,R=301]

Теперь при заходе на страницу, видим redirect loop.
В чём трабла?..

Комментарии

Аватар пользователя Stargazer Stargazer 28 февраля 2010 в 15:35

Ну так поменяйте то, что Вам надо. В чем принципиальность?

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^SITE\.ru
  RewriteRule ^(.*)$ http://www.SITE.ru/$1 [R=permanent,L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Полная конструкция кода, как оно сделано у меня. Прям пепецЪ как трудно переставить www.

Аватар пользователя patison@drupal.org patison@drupal.org 28 февраля 2010 в 16:22

Товарищ, вы видимо не внимательно прочитали первое сообщение...
Я сделал именно так. И проблем переставить c http на http://www у меня нет.
Проблема в том, что сделав именно так как я показал в Первом сообщение (то-же, что вы показали в своём последнем сообщении) - при заходе на страницу у меня получается Redirect Loop!

Аватар пользователя Stargazer Stargazer 28 февраля 2010 в 16:48

Да нет ... достаточно внимательно, чтобы понять, что Вам впадлу погуглить на тему редиректов, их вариантов написания и уместности применения.

http://www.google.ru/search?hl=ru&newwindow=1&rlz=1C1GGLS_ruRU334RU334&q...

Аватар пользователя patison@drupal.org patison@drupal.org 28 февраля 2010 в 17:10

Хорошо, если Вам "не впадлу" погуглить на эту тему, и если вы уж соизволили отписаться в моей теме, то может быть просвятите меня, почему редиректы зацикливаются?

Аватар пользователя Stargazer Stargazer 28 февраля 2010 в 17:14

Есть предположение, что дело в особенностях вашей хостинг-платформы. У меня, например, Ваша конструкция работать не будет.

[L,R=301][NC][R=permanent,L][L,QSA]

Вот с ними и разбирайтесь. Я методом тыка в свое время подбирал, пока не выявил более менее работоспособную конструкцию. Может еще где накосячили...

Аватар пользователя patison@drupal.org patison@drupal.org 28 февраля 2010 в 18:27

Спасиб.
Было предположение, что это как-то связано с тем, что при установке друпала, где-то на одном из этапов установки когда нужно было указать Адрес сайта, указали site.ru вместо www.site.ru .. думал может именно в этом проблема. Т.е. htaccess редиректит куда надо, + друпал сам пытается редиректить куда-то .. вот и получается цикл.

Аватар пользователя Stargazer Stargazer 28 февраля 2010 в 22:45

Ваще-то давайте Вам весь свой хытыацес скину, я уже просто не помню, что именно там менял, но точно помню, что тоже с первого раза нифига не получилось.

Вот так он выглядит у меня:

<FilesMatch "\.(engine|inc|info|install|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
  Order allow,deny
</FilesMatch>

Options -Indexes
Options +FollowSymLinks
AddDefaultCharset UTF-8
ErrorDocument 404 /index.php

<Files favicon.ico>
    ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>
DirectoryIndex index.php
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A1209600

  <FilesMatch \.php$>
    ExpiresActive Off
  </FilesMatch>
</IfModule>
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.YOUR_SITE\.ru
  RewriteRule ^(.*)$ http://YOUR_SITE.ru/$1 [R=permanent,L]
        RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
FileETag MTime Size
<ifmodule mod_expires.c>
  <filesmatch "\.(jpg|gif|png|css|js)$">
       ExpiresActive on
       ExpiresDefault "access plus 1 year"
   </filesmatch>
</ifmodule>

Авось заработает Wink На своём проверил прежде, чем Вам выложить предыдущую конструкцию - всё пучком.
p.s.: Тока бэкапнуть не забудьте на всякий пожарный.

p.s.s: Boost'ом не баловались случаем?

Аватар пользователя patison@drupal.org patison@drupal.org 28 февраля 2010 в 22:49

Поставил сначало как у вас - что-бы с www на http://site.ru кидало - вообще 0 эмоций.
Поменял на то что мне нужно:

  RewriteCond %{HTTP_HOST} ^site\.ru
  RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L]

опять redirect loop.

Завтра, пожалуй, отпишу с утречка хостеру. Может смогут чем-то помочь.

Аватар пользователя Stargazer Stargazer 28 февраля 2010 в 22:59

Смогут и даже не вопрос Wink У Вас нет других .htaccess, которые могут конфликтовать? Просто может что-то еще обрабатываться в соседней директории - поэтому где-то несостыковки(была подобная проблема, правда не с друпал).

Кстати... Попробуйте сессию рубануть или искусственно ошибку вызвать Wink И загляните с другого браузера - знаю, звучит глупо, но как ни странно иногда с другого браузера всё путем Wink

Аватар пользователя Stargazer Stargazer 28 февраля 2010 в 23:13

Кстати ... еще вот такой вариант может проканать:

<FilesMatch "\.(engine|inc|info|install|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
  Order allow,deny
</FilesMatch>

Options -Indexes
Options +FollowSymLinks
 RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.XXX\.ru
  RewriteRule ^(.*)$ http://XXX.ru/$1 [R=permanent,L]
AddDefaultCharset UTF-8
ErrorDocument 404 /index.php

<Files favicon.ico>
    ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>
DirectoryIndex index.php
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A1209600

  <FilesMatch \.php$>
    ExpiresActive Off
  </FilesMatch>
</IfModule>
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
FileETag MTime Size
<ifmodule mod_expires.c>
  <filesmatch "\.(jpg|gif|png|css|js)$">
       ExpiresActive on
       ExpiresDefault "access plus 1 year"
   </filesmatch>
</ifmodule>

Сорь ... www сами переставите...

p.s.Upd: У меня тоже кстати лупы, но они секунд на 5 после перезаливки файла. Вспомнил, был подобный косяк, когда редактировал напрямую через фтпшку. Ошибка висела до 5 минут, потом начинал работать нормально - тут, имхо, тупинг, который от Вас не зависит.

Удалите старый файл перед заливкой нового и немного подождите

Аватар пользователя patison@drupal.org patison@drupal.org 1 марта 2010 в 1:09

всё перепробовал, из выше предложенного... нулевой результат.
Кстати, знаете что интересно... если выставить в хтаксессе

  RewriteCond %{HTTP_HOST} ^www\.XXX\.ru
  RewriteRule ^(.*)$ http://XXX.ru/$1 [R=permanent,L]

т.е. , сделать редирект с "c www" на "без www" то вообще ничё не происходит. Т.е. не делает редирект ни если я захожу на http://site.ru, ни если захожу на http://www.site.ru