Содержание:
Здравствуйте! Возникла задача от сеошника по удалению index.php из ссылок в wordpress-сайте.
Обычно, это можно решить с помощью .htaccess, однако в данном случае я столкнулся с парой нюансов:
- Необходимо учитывать тип запроса — обычный get или же это запрос к ajax/rest?
- Запрос к публичной части сайта или к админке?
- Если на сайте используется плагин кэширования, в частности WP Super Cache с «экспертным» режимом, правила .htaccess могут не сработать.
Помучавшись с комбинированием правил, было принято решение написания лёгкого MU-плагина. Однако, на сайте использовался WP Super Cache, который не даёт MU-плагинам срабатывать, если в его настройках не включена «поздняя инициализация», поэтому, плагин был дополнен, по сути, копией кода в виде подплагина для WPSC. Итог можно оценить в гитхаб-репозитории, также выложу архив актуальной версии 1.2.1:
Что делает
- Проверяет тип запроса — работает только на GET
- Игнорирует обращения к wordpress-путям (содержат «wp-«), в т.ч. к админке
- Позволяет выбирать, добавлять ли завершающий слэш — опция
$remove_trailing_slash
- Если всё ок — создаёт 301 редирект на URL без index.php
- При срабатывании добавляет заголовок
X-HDDEN-MU-INDEXPHPREDIR: active
илиX-HDDEN-WPSCPlugin-INDEXPHPREDIR: active
Установка
Базовая, распаковать в корень сайта (либо в подкаталог, в котором находится директория wp-content). После — активировать плагин «WP Super Cache — index.php redirect fix»


