jkm

Рейтинг
120
Регистрация
20.02.2014
xilgiz:
"RedirectMatch 301 (.*)\.html$ http://evakuator116.ru$1"
Работает, на всех страницах, кроме главной, она получается http://evakuator116.ru/index

Как можно решить проблему, не подскажете?

Правила обрабатываются в том порядке, в котором объявлены в файле. Достаточно выше добавить отдельное правило для /index.html


RedirectMatch 301 ^/index\.html$ http://evakuator116.ru/
RedirectMatch 301 (.*)\.html$ http://evakuator116.ru$1

Это можно сделать так


RedirectMatch 301 ^/.+(?<!\.html)$ http://www.site.com$0.html

Или так


RedirectMatch 301 ^/[^.]+$ http://www.site.com$0.html

Чуть поправить одно правило и расставить в правильном порядке


RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]

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

В %{THE_REQUEST} будет строка вида "GET /articles/index.php?go=article&id=123 HTTP/1.1"


RewriteCond %{THE_REQUEST} \?go=article&id=([^\ &]+)
RewriteRule ^ /articles/article-%1.html? [R=301,L]

RewriteCond %{THE_REQUEST} \ (/prog/[^?]+\?)
RewriteRule ^ %1 [R=301,L]

Часто ошибочно ставят правила для редиректа в самый конец после конструкций вроде RewriteRule .* index.php [L]

После этого редирект не работает.

Если хочется изврата, то как-то так:


RewriteCond %{QUERY_STRING} (page=[^&]+)
RewriteCond %1\ %{QUERY_STRING} ^(\S+).+(id=[^&]+)
RewriteCond %1&%2\ %{QUERY_STRING} ^(\S+).+(cat1=[^&]+)
RewriteCond %1&%2\ %{QUERY_STRING} ^(\S+).+(cat2=[^&]+)
RewriteCond ?%1&%2\ %{THE_REQUEST} !^(\S+)[^?]+\1\ HTTP
RewriteRule ^ /?%1&%2 [R=301,L]

Ну тогда применить аналогичный шаблон с RewriteRule


RewriteEngine On
RewriteRule ^dir/index.php(?:/(.*))?$ /dir/$1 [L,R=301]

Ставить в самое начало файла.

А ставите правила в .htaccess который в корне сайта или может в папке /dir/?

Шаблон ^/dir/index.php(?:/(.*))?$ совпадает с адресами

/dir/index.php

/dir/index.php/pathtopage.html

Шаблон ^/dir/index.php/(.*)$ совпадет только с адресами вида /dir/index.php/pathtopage.html

Правила составлены верно. Проблема может быть если поставили их не в самое начало, а после других правил. Например после RewriteRule . index.php [L]


RedirectMatch 301 ^/([^/]+)/news1/$ /$1/news2/

В старт-посте регулярки расчитаны на адреса с / после index.php


RedirectMatch 301 ^/dir/index.php(?:/(.*))?$ /dir/$1
Всего: 749