Редирект 301 в .htaccess

Ave Lecter
На сайте с 23.12.2008
Offline
121
3735

Добрый день.

Настроил редирект с www на без www в .htaccess.

На главной странице редирект работает корректно. Когда ввожу домен с www - то открывается без www.

Но почему-то некоторые разделы/подразделы выпадают в 404 ошибку. Причём как-то выборочно: часть разделов редиректит, часть - нет. В случае когда редирект не срабатывает, открывается урл:

http://***.ru/bitrix/urlrewrite.php и "Страница не найдена" 404

Прописывал редиректы так:

<IfModule mod_rewrite.c>

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

В htaccess`e также нашёл следующую конструкцию:

<IfModule mod_rewrite.c>

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

Там как раз присутствует строчка "^(.*)$ /bitrix/urlrewrite.php" Может это как-то связано?

Весь файл htaccess:

Options -Indexes 

ErrorDocument 404 /404.php

<IfModule mod_php5.c>
php_flag allow_call_time_pass_reference 1
php_flag session.use_trans_sid off

#php_value display_errors 1

#php_value mbstring.internal_encoding UTF-8
</IfModule>

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpeg "access plus 3 day"
ExpiresByType image/gif "access plus 3 day"
</IfModule>

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

RedirectPermanent /dostavka-i-oplata/ http://***.ru/delivery-and-payment/
RedirectPermanent /o-magazine/ http://***.ru/about/
O
На сайте с 20.10.2008
Offline
101
#1

В вашем коде ошибка от его мудрёности и универсальности.. Лень мудрить дальше. Просто потрудитесь один раз хардкодом вписать имя домена (вместо site.ru свой):


<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
</IfModule>
42
Ave Lecter
На сайте с 23.12.2008
Offline
121
#2

Odysseus, Такой способ редиректа я изначально прописал - не работает. Поэтому, решил извернуться.

O
На сайте с 20.10.2008
Offline
101
#3
Ave Lecter:
Odysseus, Такой способ редиректа я изначально прописал - не работает. Поэтому, решил извернуться.

Я где-то видел этот способ со слешами перед точками. Попробуйте

эту строку в таком

RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]

и таком виде

RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]

Это особенности работы настроек сервера. Тут надо пробовать.

Для теста вобще рекомендую сначала вставить в .htaccess только эти строки в начало:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]

RewriteRule ^(.*)$ http://google/ [R=301,L]

т.е. без <IfModule mod_rewrite.c>, Options +FollowSymLinks, </IfModule>

Если отправляет на http://google/ (ессесно тут ошибка будет, так как без .com или .ru на конце), то код второй строки корректен. Переходим ко третьей строке..

Ave Lecter
На сайте с 23.12.2008
Offline
121
#4

Odysseus, спасибо, но не помогло.

Нагуглил решение на форуме битрикса.

Нужно вот это:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

Поставить в htaccess перед этим:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>
siv1987
На сайте с 02.04.2009
Offline
427
#5
Ave Lecter:
Нагуглил решение на форуме битрикса.
Нужно вот это:

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

Ave Lecter
На сайте с 23.12.2008
Offline
121
#6

Гм, у меня опять проблема с редиректами, уже по другому проекту.

Планируется переезд сайта, новая структура, дизайн. Прописаны редиректы с конкретной страницы на конкретную страницу.

Сейчас в htaccess следующее (приведена часть записей):

RewriteEngine On

redirect 301 /features-mainmenu-27 /katalog.html

redirect 301 /features-mainmenu-27/pyrokotel /katalog/piroliznye-kotly.html

и т.д.

Пробовали вместо "redirect 301" использовать "RedirectPermanent" (без кавычек)

Прописывали абсолютные адреса на конечные страницы

Не помогает

siv1987
На сайте с 02.04.2009
Offline
427
#7

RewriteEngine и Redirect это директивы разных модулей.

Если совмещаются то Redirect'ы должны стоять перед всеми Rewrit'ами.

Либо пишите редирект на RewriteRule.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий