301-редирект для index.php в ссылках WordPress

Здравствуйте! Возникла задача от сеошника по удалению index.php из ссылок в wordpress-сайте.

Обычно, это можно решить с помощью .htaccess, однако в данном случае я столкнулся с парой нюансов:

  1. Необходимо учитывать тип запроса — обычный get или же это запрос к ajax/rest?
  2. Запрос к публичной части сайта или к админке?
  3. Если на сайте используется плагин кэширования, в частности WP Super Cache с «экспертным» режимом, правила .htaccess могут не сработать.

Помучавшись с комбинированием правил, было принято решение написания лёгкого MU-плагина. Однако, на сайте использовался WP Super Cache, который не даёт MU-плагинам срабатывать, если в его настройках не включена «поздняя инициализация», поэтому, плагин был дополнен, по сути, копией кода в виде подплагина для WPSC. Итог можно оценить в гитхаб-репозитории, также выложу архив актуальной версии 1.2.1:

Что делает

  1. Проверяет тип запроса — работает только на GET
  2. Игнорирует обращения к wordpress-путям (содержат «wp-«), в т.ч. к админке
  3. Позволяет выбирать, добавлять ли завершающий слэш — опция $remove_trailing_slash
  4. Если всё ок — создаёт 301 редирект на URL без index.php
  5. При срабатывании добавляет заголовок X-HDDEN-MU-INDEXPHPREDIR: active или X-HDDEN-WPSCPlugin-INDEXPHPREDIR: active

Установка

Базовая, распаковать в корень сайта (либо в подкаталог, в котором находится директория wp-content). После — активировать плагин «WP Super Cache — index.php redirect fix»

MU-плагин активен
MU-плагин активен
Результат работы плагина - index.php удален
Результат работы плагина — index.php удален

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх