Вам нужно перезапускать apache, чтобы правила перезаписи в .htaccess вступили в силу?

99

Я отправил свои файлы .htaccess на производственные серверы, но они не работают. Будет ли перезапуск следующим шагом, или я должен проверить что-нибудь еще.

Джесси Хаттабо
источник

Ответы:

94

Для изменений в .htaccess перезапуск не требуется. Что-то еще не так.

Убедитесь, что ваш .htaccess включает инструкцию

RewriteEngine на

который требуется, даже если он также присутствует в httpd.conf. Также убедитесь, что .htaccess доступен для чтения процессом httpd.
Проверьте error_log - он сообщит вам обо всех ошибках в .htaccess, если он используется. Помещение преднамеренной синтаксической ошибки в .htaccess - хорошая проверка, чтобы убедиться, что файл уже используется - вы должны получить ошибку 500 на любой странице в том же каталоге.

Наконец, вы можете включить перезапись журнала с помощью следующих команд в httpd.conf:

RewriteLog "журналы / перезапись"

RewriteLogLevel 7

Сгенерированный таким образом файл журнала даст вам подробные сведения о том, какие правила перезаписи совпали и как они были обработаны.

TomG
источник
3
Это немного устарело. Я столкнулся с аналогичной проблемой и хотел отладить свои перезаписи для конкретного случая использования. Я попробовал этот метод, но после небольшого разочарования и покопания понял, в чем проблема. Это для более старых версий apache. Для apache2.4> заменить RewriteLog & LogLevel выше: LogLevel alert rewrite:trace7. После перезапуска apache вы должны увидеть следы в error.log Надеюсь, что это поможет. http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Каспер Уилкс,
52

Нет :

Apache позволяет децентрализованно управлять конфигурацией с помощью специальных файлов, размещенных внутри веб-дерева. Обычно вызываются специальные файлы .htaccess, но в директиве AccessFileName можно указать любое имя ... Поскольку файлы .htaccess читаются при каждом запросе, изменения, внесенные в эти файлы, вступают в силу немедленно ...

Милен А. Радев
источник
Если вы добавили имя пользователя в поле «Требовать пользователя» в файле с поддержкой сайтов, я опытным путем обнаружил, что вам действительно требуется перезагрузка. Это делает изящный.
Росс
18

Из документации apache: Чаще всего проблема в том, что AllowOverride не установлен таким образом, что ваши директивы конфигурации соблюдаются. Убедитесь, что у вас не действует AllowOverride None для рассматриваемой области файла. Хороший тест для этого - поместить мусор в файл .htaccess и перезагрузить его. Если ошибка сервера не возникает, значит, у вас почти наверняка действует AllowOverride None.

Крысолов
источник
1
Удаление ссылки на Apache - AllowOverride: httpd.apache.org/docs/2.2/mod/core.html#AllowOverride
scunliffe,
2
Я добавляю эту строку «<directory /> </directory>» в свой .htaccess, чтобы сгенерировать ошибку в журнале. Он скажет «<Каталог здесь запрещен», и я знаю, что он читает мой файл.
Mnebuerquo,
3

Только если у тебя нет добавили модуль mod_rewrite в Apache.

Вам нужно перезапустить Apache, только если вы измените какие-либо файлы Apache ".conf".

этиреальный
источник
2

У меня такая же проблема, и кажется, что сообщение PiedPiper о AllowOverride было наиболее полезным. Проверьте свой файл httpd.conf на наличие «AllowOverride» и убедитесь, что для него установлено значение «Все».

Дэйв Ип
источник
1
Соответствующее сообщение: Как установить AllowOverride all
Зак Сосье
2

В случае .htaccess перезапуск не требуется, если он не работает, включая возможные причины.

  • AllowOverride Нельзя указать, какой пользователь может установить в httpd.conf или, возможно, придется связываться с администратором сервера.

  • Проверьте имя файла .htaccess, он должен быть .htaccess, а не htaccess.txt, см. Здесь, как его создать.

  • Попробуйте использовать Options -Indexesили deny allвид простой директивы , чтобы увидеть , если он работает или нет.

  • очищать кеш браузера каждый раз, если есть правило для перенаправления или подобное, если предыдущее перенаправление кэшируется, это выглядит так, как будто что-то не работает.

Абхишек Гурджар
источник
0

Что в вашем .htaccess? RewriteRules? Убедитесь, что mod_rewrite установлен и включен.

Другие вещи? Попробуйте установить для AllowOverride значение «все» в этом каталоге.

Ceejayoz
источник