Я переместил сайт с одного хоста на другой и при этом наткнулся на ловушку, заключающуюся в том, что мне не удалось загрузить файл .htaccess в процессе.
Я пытаюсь восстановить указанный .htaccess на основе более ранней (возможно, неработающей) сохраненной копии, но все, что я получил, это 404 страницы. Другими словами, что-то не так с этим простым правилом перезаписи, но я предполагаю, что mod_rewrite работает правильно, поскольку я больше не вижу ошибок типа «внутренняя ошибка сервера 500», а другие сайты vhost работают с mod_rewrite на той же машине.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^([^/.]+)/?$ index.php?page=$1 [L]
</IfModule>
Образец (актуальной, рабочей) страницы с моего сайта:
site.com/index.php?page=tips
Все мои ссылки и, надеюсь, адресная строка должны быть в таком виде:
site.com/tips/
Я думал, что понял это; это не так уж сложно. Я исказил и устранил строку RewriteRule в различных комбинациях на основе предложений различных веб-сайтов. Я гуглил два дня и нашел кое-что, что близко к тому, что я делаю, но не совпадало. Каждый раз, когда я вношу изменения, я перезапускаю службу apache на сервере, перехожу в Chrome на локальном компьютере и нажимаю Ctrl + F5 для очистки кеша и обновления; есть ли шанс, что я пропустил шаг "чистой перезагрузки"?
Весь сайт проходит через index.php, и я не планирую усложнять ситуацию с дальнейшим вложением, пока я не пойму регулярное выражение намного лучше. Любая помощь приветствуется!
Боковые примечания: Я использую Apache v2.2.22, и мне кажется, что мне не удается заставить работать функцию "RewriteLogs" в этой версии (конечно, без использования .htaccess), иначе я бы не опубликовал этот вопрос о новичках сегодня. В версии 2.4 эта функция больше не действует (ведение журнала было полностью переработано), но я пока не могу перейти на нее с помощью apt-get на моем сервере OpenVZ Ubuntu 12.04 x64.
В итоге оказалось, что mod_rewrite был не включен на моем сервере. Я проверил это, поместив файл phpinfo.php в каталог сайта и проверив раздел «Загруженные модули» на наличие mod_rewrite, который действительно отсутствовал.
Я включил mod_rewrite с помощью sudo a2enmod rewrite
, снова проверил список модулей с помощью apache2ctl -M
, и все снова заработало.
Что еще более странно, mod_rewrite каким-то образом отключился для всего сервера, а не только для этих страниц. Учитывая, что я обслуживал другие сайты, используя их собственные файлы .htaccess, и они также не работали (что и подсказало мне это), я рад, что обнаружил это относительно быстро.
Я также узнал, что в Ubuntu есть своя собственная группа для утверждения / тестирования обновлений apache, и они еще не квалифицировали патч Apache 2.4, и может пройти много времени с тех пор, как с ним были внесены несколько существенные изменения.