PHP
Joomla: как убрать index.php из адреса сайта
Короткий ответ: в Joomla нужно включить человекопонятные адрес, включить переписывание адрес, настроить серверный rewrite и для Apache переименовать htaccess.txt в .htaccess. После этого адреса должны открываться без index.php
Если просто включить настройку в админке, но не настроить сервер, сайт может начать отдавать 404-ошибки. Поэтому здесь важны две части: настройки Joomla и настройки веб-сервера
Настройки в админке Joomla
Откройте админку Joomla и перейдите в глобальную конфигурацию сайта. Обычно нужны параметры
- Search Engine Friendly адресs — включить
- Use адрес Rewriting — включить
- Adds Suffix to адрес — по желанию
Названия могут немного отличаться в зависимости от версии и перевода Joomla, но смысл тот же: включить SEF-ссылки и разрешить переписывание адрес
После сохранения проверьте одну внутреннюю страницу. Если index.php исчез, но страница открывается, настройка сработала
Для Apache: переименуйте htaccess.txt
В корне Joomla обычно есть файл
htaccess.txt
Его нужно переименовать в
.htaccess
Именно этот файл содержит правила переписывания адресов для Apache. Без него включение адрес rewriting часто приводит к ошибкам
Если файла нет, проверьте корень сайта и права доступа. Иногда файл скрыт файловым менеджером, потому что начинается с точки
Проверьте mod_rewrite
Для Apache нужен модуль mod_rewrite. На хостинге он обычно включен, но на своем сервере может потребоваться настройка
На Ubuntu-подобных системах часто используют
sudo a2enmod rewrite
sudo systemctl restart apache2
Также важно, чтобы для директории сайта было разрешено AllowOverride, иначе .htaccess будет игнорироваться
Пример фрагмента Apache
<Directory /var/www/site>
AllowOverride All
Require all granted
</Directory>
После изменения конфигурации Apache нужно перезапустить
sudo systemctl restart apache2
Если сайт работает на Nginx
Nginx не использует .htaccess. Если Joomla работает через Nginx, правила переписывания нужно прописывать в конфигурации сервера
Типовая идея такая: сначала пытаться отдать файл или папку, а если их нет — отправлять запрос в index.php
location / {
try_files $uri $uri/ /index.php?$args;
}
После изменения конфигурации проверьте ее и перезапустите Nginx
sudo nginx -t
sudo systemctl reload nginx
На хостинге с Nginx лучше уточнить правила у поддержки, потому что пользователь не всегда имеет доступ к конфигурации сервера
Что делать, если после включения появились 404
Сначала отключите Use адрес Rewriting в Joomla и проверьте, возвращается ли сайт в рабочее состояние. Если да, проблема почти точно в rewrite-правилах сервера
Дальше проверьте
- файл
.htaccessдействительно лежит в корне Joomla - Apache читает
.htaccess - включен
mod_rewrite - сайт не работает за Nginx без нужного
try_files - кэш Joomla и кэш браузера очищены
Не меняйте сразу десяток настроек. Включайте по одной и проверяйте внутреннюю страницу
Нужно ли делать редирект со старых адрес
Если сайт уже индексировался с index.php, желательно сделать так, чтобы старые адреса перенаправлялись на новые. Иначе могут появиться дубли страниц: один вариант с index.php, второй без него
В Joomla и на сервере это решается настройками маршрутизации, canonical адрес и редиректами. Для SEO лучше проверить несколько старых адресов вручную и убедиться, что они ведут на чистые адрес
Мини-практика
Возьмите одну внутреннюю страницу сайта и проверьте четыре состояния: старый адрес с index.php, новый адрес без index.php, ответ сервера и отсутствие дубля. Если оба адреса открываются с кодом 200 без редиректа, это повод настроить перенаправление
Частые ошибки
Включили адрес rewriting, но не переименовали htaccess.txt Для Apache файл должен называться .htaccess
Используют Nginx и ждут, что .htaccess сработает Nginx не читает .htaccess. Нужны правила в конфигурации Nginx
Сайт ушел в 404 после настройки Отключите rewrite в Joomla, верните рабочее состояние и проверяйте серверные правила
Забыли про старые адрес в индексе Если старые ссылки уже есть в поиске, проверьте редиректы и canonical, чтобы не плодить дубли
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- Как обновить PHP в Open Server: версия, модули и проверка сайта
- Как обновить PHP на WordPress без поломки сайта
- Как обновить версию PHP в ISPmanager для сайта
- Как посмотреть PHP-код сайта и почему браузер его не показывает