RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Архив
В случае если, $_SERVER[‘HTTP_IF_MODIFIED_SINCE’] отсутствует:
.htaccess
RewriteEngine on RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}] RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
php:
session_cache_limiter('private_no_expire'); session_start();
Усовершенствованное решение этого варианта: http://krylov.org.ua/?p=1130
.htaccess
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$ RewriteRule . %1/%2 [R=301,L]
Работает для http://site.com/dir1///dir2
но проблема остается в адресах типа http://site.com///uri (несколько слешей после домена)
Решение на php:
if(stristr($_SERVER['REQUEST_URI'],'//')){ $uri=preg_replace('#/{2,}#','/',$_SERVER['REQUEST_URI']); header('Location: '.$uri,false,301); exit; }
Усовершенствованный вариант: https://krylov.org.ua/htaccess-dubli-stranits-s-neskolkimi-slesham-2/
Необходимо настроить 301 редирект со всех страниц, где в теле URL больше одного слеша подряд (за исключением http:// и знаков «/» в конце URL) на аналогичные URL с одним знаком «/».
Также необходимо настроить 301 редирект со всех страниц, где в конце URL присутствует знак «/» на аналогичные URL без знака «/».
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1 [R=301,L] RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 [R=301,L]
Если DocumentRoot у 2 доменов один и тот же (одна папка) и нужно сделать редирект с одного определенного домена на другой.
RewriteCond %{HTTP_HOST} ^olddomain\.spb\.ru RewriteRule ^(.*)$ http://newdomain.ru/$1 [R=301,L]
Если сайты в разных папках и проверка на домен не нужна (всегда редирект в не зависимости от домена — первая строка не нужна)
RewriteEngine On RewriteRule ^(.*)$ http://newdomain.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]