Эти правила действуют ровно наоборот, перенаправляя на адреса без "/".
А предыдущие правила
RewriteCond %{SCRIPT_FILENAME}.html -f RewriteRule ^(.*)$ $1.html [L] ErrorDocument 404 /errors/404.html
нужно заменить на такие
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^(.*[^/])$ /$1/ [R=301,L] RewriteCond %{DOCUMENT_ROOT}/$1.html -f RewriteRule ^(.+)/$ $1.html [L] ErrorDocument 404 /errors/404.html
Эта конструкция кроме главной зацепит и все внутренние страницы.
RedirectMatch 301 ^/$ http://mydomain.ru/page.html
RewriteEngine On RewriteCond %{REQUEST_URI} =/page1 [OR] RewriteCond %{REQUEST_URI} =/page2 [OR] RewriteCond %{REQUEST_URI} =/page3 [OR] RewriteCond %{REQUEST_URI} =/page4 [OR] RewriteCond %{REQUEST_URI} =/page5 [OR] RewriteCond %{REQUEST_URI} =/page6 [OR] RewriteCond %{REQUEST_URI} =/page7 [OR] RewriteCond %{REQUEST_URI} =/page8 [OR] RewriteCond %{REQUEST_URI} =/page9 [OR] RewriteCond %{REQUEST_URI} =/page10 RewriteRule ^ http://site.biz%{REQUEST_URI} [L,R=301] RewriteRule ^ http://site.biz/? [L,R=301]
Данные правила будут одинаково работать в корне и в папке, так что тут зависит от предпочтений.
Тут может помочь включение буферизации вывода http://php.net/manual/ru/function.ob-start.php
<?php function callback($buffer) { return preg_replace('~<div id="name">.*</div>~Uis', '', $buffer); } ob_start("callback");
Если вставлять это в самом начале index.php, то функция callback получит сгенерированную страницу и может полностью её поменять.
Еще есть вариант подключить файл с этим кодом без редактирования файлов CMS используя директиву auto-prepend-file
old.ru/board/ => new.ru/
old.ru/board/page => new.ru/
Или такой вариант
old.ru/board/page => new.ru/page
Если делать средствами mod_alias, то для первого варианта правило
RedirectMatch 301 ^/board/ http://new.ru/
Для второго
Redirect 301 /board/ http://new.ru/
Другой вариант отдавать код 403 Forbidden
RewriteRule (?<![^/])undefined - [L,F]
Предполагалось что в переменной $fp уже есть искомый текст в <div class="mtext">
$fp = file_get_contents('index.html');
RewriteRule (?<![^/])undefined 404.shtml [L]
Ставить в самом верху сразу после RewriteEngine On
Хотя так получится, что для этих страниц будет код ответа 200. Лучше так
ErrorDocument 404 /404.shtml RewriteRule (?<![^/])undefined - [L,R=404]