- Убираем index.php в конце URL-адреса
- 301 редирект только адреса site.ru/index.php без GET параметров
- 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами
- Убрать index.php внутри URL
- Убрать index.html в конце URL
- Убрать index.html и index.php главной страницы
- Убираем всё сразу
- Описание
Убираем index.php в конце URL-адреса
RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_URI} ^(.*)/index\.php$ RewriteRule ^(.*)$ %1/ [R=301,L]
Еще вариант
RewriteCond %{REQUEST_URI} ^(.*)/index\.php$ RewriteRule ^(.*)$ %1/ [R=301,L]
Еще вариант
RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP RewriteRule ^index\.php$ https://site.ru/ [R=301,L]
Еще вариант
RewriteEngine On RewriteRule ^index\.php$ / [R=301,L] RewriteRule ^(.*)/index\.php$ /$1/ [R=301,L]
Еще вариант для битрикса
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] RewriteCond %{REQUEST_URI} !/bitrix/admin/.* [NC] RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
Еще один для битрикса
RewriteCond %{THE_REQUEST} /(.*)index.php.*$ RewriteCond %{THE_REQUEST} !bitrix/admin/ RewriteRule .* https://site.ru/%1 [R=301,L]
301 редирект только адреса site.ru/index.php без GET параметров
RewriteCond %{REQUEST_URI} /index.php RewriteCond %{QUERY_STRING} ^\z RewriteRule ^(.*)$ https://site.ru/? [R=301,L]
301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами
Пример: типа site.ru/index.php?get=1 на site.ru/?get=1
RewriteCond %{REQUEST_URI} /index.php RewriteRule ^(.*)$ https://site.ru/ [R=301,L]
Убрать index.php внутри URL
В Drupal даже после того, как убрали index.php остаются такие url вида: site.ru/index.php/node/2 чтобы убрать и их, добавить строчку
RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP RewriteRule ^index\.php$ https://site.ru/ [R=301,L] RewriteRule ^(index\.php/.*)$ / [R=301,L]
Еще вариант
RewriteRule ^index.php/(.+)$ /$1 [R=301,L] RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
Еще вариант
DirectoryIndex index.php RewriteEngine On RewriteCond %{REQUEST_URI} ^/index\.(.+)$ RewriteRule .+ site.ru/ [R=301,L]
Убрать index.html в конце URL
RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP RewriteRule ^index\.html$ https://site.ru/ [R=301,L]
Еще вариант
RewriteEngine On RewriteRule ^index\.html$ / [R=301,L] RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]
Убрать index.html и index.php главной страницы
RewriteEngine On RewriteRule ^index\.html$ / [R=301,L]
RewriteEngine On RewriteRule ^index\.php$ / [R=301,L]
Убираем всё сразу
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ https://site.ru/$1 [R=301,L]
Описание
Очень важные редиректы. Страницы дубли с index.php можно часто наблюдать в выдаче, когда забывают сделать редиректы. И как правило не на первых страницах выдачи. Также часто забывают закрывать заглушки CMS/темы/хостинга в виде index.html или index.htm
Хочу обратить внимание еще на тот факт, что проверять редиректы лучше не только для главной страницы, но и для страниц категорий, разделов. Особенно часто тут грешат многие CMS (в частности Битрикс, Drupal, Joomla) и страницы категории доступны по адресу а-ля https://site.ru/category/index.php, а то и внутри урла, как у Друпала https://site.ru/index.php/node/
Не забудьте после настройки редиректов, особенно когда убираете index.php, проверить доступность админки и других важных разделов вашего сайта, т.к. скорее всего на них также распространяется правило из htaccess и бывают случаи, что в админку невозможно попасть. Придется добавлять исключения в код редиректов, исключения можно найти выше и приспособить под вашу ситуацию.
Также в качестве рекомендации: желательно вообще заглянуть в корень сайта и посмотреть, какие еще могут файлы html там лежать, очень часто забывают установочные, файлы документации и т.д., которые также участвуют в ранжировании и размывают релевантность сайта, особенно, если у вас мало страниц на сайте