word <a href="http://site1.ru">site1.ru</a> word http://site3.ru word word <a href="http://site2.ru">site2.ru</a>
Это последствия применения <\/a>.* которая захватит максимально любых символов до конца строки.
Можно поправить выкинув из шаблона все лишнее оставив только (\s)(http:\/\/[\w\.\-\_%]*)
Но не сработает если ссылка в начале текста или обернута в другой тег <span>http://site3.ru</span>.
Решить можно так:
$html = preg_replace('~ \G ( (?: [^h<]+ | <a.*?</a> | (?!(?2)). )*+ ) (http://[-._%/\w]*)~ix', '\1<a href="\2">\2</a>', $html );
Правила обрабатываются в том порядке, в котором объявлены в файле. Достаточно выше добавить отдельное правило для /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\ HTTPRewriteRule ^ /?%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/