Разрабатывала сайт на WP и столкнулась с реальной проблемой, над которой билась несколько дней.
Предыстория:
На работе у нас развёрнут свой "dev" сервер с помощью которого разрабатываются сайты.
Забыла сразу настроить постоянные ссылки, поэтому занялась этим когда большая часть функционала сайта уже была реализована.
Что за проблема у меня возникла:
При настройки ЧПУ на произвольные ссылки: /%category%/%postname%/ у меня
постоянно выбивалась ошибка 404 когда был переход на любую страницу с "правильным названием", при этом совершенно не важно какие именно я прописывала и /%category%/%postname%.html и просто /%postname%/.
Облазив интернет, все решения которые попадались - мне не помогали. А бедный .htaccess был редактирован больше обычного. Плагин Cyr-to-lat стоял и вот вроде всё должно работать. Но раз за разом я видела только ошибку 404.
Я нашла решение этой проблемы не сразу. Связано это с настройками нашего самодельного сервера.
В нём отсутствовал определенный модуль, который и отвечает за адекватную настройку ЧПУ. Это может быть полезным тем, кто так же работал/работает или будет работать на "своём" сервачке, вместо локального компьютера.
Вот решение которое сработало:
1. Установка плагина Cyr-to-lat, по поиску в админке сможете выйти на него и добавить на сайт.
2. Права на .htaccess 664
Содержимое .htaccess:
(Добавлять не обязательно, если у вас установлены нужные права на этот файл WP сам подключит эти правила)
Код:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
3. КОРЕНЬ ЗЛА
Если ваш веб-сервер (как и в моём случае) Apache, то скорее всего отсутствует модуль mod_rewrite. Без которого пиши/обновляй/перезаливай файл .htaccess — работать правила НЕ БУДУТ.
Так же, возможно модуль есть, а вот .htaccess у вас не работает.
Проблем всего 2:
1) Не работает файл .htaccess
2) Не загружен модуль Apache — mod_rewrite
В первом случае необходимо проверить в настройках Apache (httpd.conf) следующие директивы AccessFileName и AllowOverride.
Для AccessFileName значение должно быть .htaccess (AccessFileName .htaccess).
Для AllowOverride (действует внутри <directory>) значение должно быть All (AllowOverride All).
Во втором случае проверяем прописан ли в настройках mod_rewrite.
В секции # ### Loaded Modules должна быть строка:
Код:
LoadModule rewrite_module [путь к модулю]/mod_rewrite.so
В секции # ### Added Modules должно быть:
Если у вас нет прав для работы с Apache, можете написать своему хостинг провайдеру или системному администратору, который подключит всё необходимое.
Ну вот, теперь после проделанных действий, всё точно заработает.
(Почему продолжился поиск проблемы в серверной части: был перенос на домашнюю машину, с сервером Open Server - ЧПУ настроились сразу и адекватно)
Если кто-нибудь столкнется с подобной проблемой, действия которые я описала должны будут помочь.
А если вы нашли другие способы решения подобной проблемы, отпишитесь, очень интересно будет почитать.
Всем спасибо за внимание к длиннопосту. Надеюсь, сочтете информацию полезной.