Назад | Перейти на главную страницу

Динамический URL-адрес для статического URL-адреса с мод-перезаписью (вероятно, проблема RewriteRule)

Я переместил сайт с одного хоста на другой и при этом наткнулся на ловушку, заключающуюся в том, что мне не удалось загрузить файл .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, и может пройти много времени с тех пор, как с ним были внесены несколько существенные изменения.