301 редирект и правила для определённого каталога

A
На сайте с 22.04.2009
Offline
72
843

Подскажите, пожалуйста, как с помощью правила в файле htaccess сделать редирект так, чтобы все файлы в определённом каталоге поменяли расширение с htm на html? Чтобы сайт не потерял позиций в поисковиках и веса страниц.

Нашёл такой пример:

RewriteEngine on

RewriteBase /

RewriteRule ^(.*)\.htm$ $1.html [R=301]

Но он работает на весь сайт, а как указать отдельную дирректорию в которой нужно это сделать, не могу найти как...

WebAlt
На сайте с 02.12.2007
Offline
251
#1

Положите его в нужный каталог, а не в корень сайта.

Файл .htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).
A
На сайте с 22.04.2009
Offline
72
#2

Не помогает. Один htaccess лежит в главной дирректории и в нём переопределены пара файлов по такому типу:


RewriteEngine on
RewriteBase /
RewriteRule ^index\.htm$ index.html [R=permanent]
RewriteRule ^main\.htm$ main.html [R=permanent]

Второй положил в нужную дирректорию указав:

RewriteEngine on

RewriteBase /
RewriteRule ^(.*)\.htm$ $1.html [R=301]

Но при попытке открыть файл из этой дирректории пытается найти его в главной дирректории сайта и выдаётся ошибка:

Not Found

The requested URL /index.html was not found on this server.
gormarket
На сайте с 29.12.2010
Offline
47
#3

anbura, попробуйте в htaccess каталога использовать директиву RewriteBase для указания правильного префикса URL

т.е. допустим, если у вас htaccess лежит в каталоге forum, вместо

RewriteBase /

сделайте в нем

RewriteBase /forum

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
mfl
На сайте с 16.10.2006
Offline
134
mfl
#4

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

RewriteRule ^(cat/.*)\.htm$ $1.html [R=301,L]

Только поставьте это правило первым

gormarket
На сайте с 29.12.2010
Offline
47
#5

mfl, более правильно все-таки вынести правило для файла из каталоге в файл htaccess этого каталога (а не прописывать это правило в файле htaccess в корне сайте).

Иначе проверка соответствия этому правилу будет производиться при обращении к любому URL на сайте (хотя может это в конечном итоге и не займет сильно много времени).

mfl
На сайте с 16.10.2006
Offline
134
mfl
#6

gormarket, просто Вы в первом посте сообщении, что разместили htaccess в корне.

Можете перенести htaccess в нужную категорию, тогда правило будет выглядеть так:

RewriteRule ^(.*)\.htm$ /cat/$1.html [R=301,L]

---------- Добавлено 04.02.2012 в 14:25 ----------

gormarket, ошибся, подумал Вы ТС

A
На сайте с 22.04.2009
Offline
72
#7
mfl:

Можете перенести htaccess в нужную категорию, тогда правило будет выглядеть так:

RewriteRule ^(.*)\.htm$ /cat/$1.html [R=301,L]

Этот вроде работает, спасибо большое.

Ещё вопрос про 302 редирект, нужно просто заменить 301 на 302? И нужна ли буква L в этом случае?

gormarket
На сайте с 29.12.2010
Offline
47
#8
anbura:
Ещё вопрос про 302 редирект, нужно просто заменить 301 на 302? И нужна ли буква L в этом случае?

Просто замените на 302.

флаг L (означающий что это последнее преобразование) нужен (если Вы не хотите применять к новому URL дальнейшие правила преобразований, расположенные ниже по файлу htaccess)

A
На сайте с 23.11.2011
Offline
119
#9

Дабы не плодить темы, спрошу тут:

Как сделать редирект с папки (и всеми вложенными страницами) на морду?

Только нужно через основной htaccess (папка будет удалена).

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