Как отладить .htaccess RewriteRule не работает - PullRequest
112 голосов
/ 11 февраля 2012

У меня есть RewriteRule в .htaccess файле, который ничего не делает. Как мне устранить это?

  • Как я могу проверить, читает ли файл .htaccess и подчиняется ли Apache? Могу ли я написать эхо-сообщение "оно работает", если я напишу его, где будет отображаться эта строка?
  • Если файл .htaccess не используется, как я могу заставить его использовать Apache?
  • Если .htaccess используется, но мой RewriteRule все еще не дает эффекта, что еще я могу сделать для отладки?

Ответы [ 8 ]

141 голосов
/ 11 февраля 2012

Введите какое-нибудь нежелательное значение в .htaccess, например, foo bar, sakjnaskljdnas любое ключевое слово, не распознанное htaccess, и перейдите на ваш URL.Если он работает, вы должны получить

500 Внутренняя ошибка сервера

Внутренняя ошибка сервера

Сервер обнаружил внутреннюю ошибку или неверную конфигурацию и не смог завершитьваш запрос ....

Предлагаю вам поставить его вскоре после RewriteEngine on.


, поскольку вы находитесь на своей машине.Я предполагаю, что у вас есть доступ к файлу apache .conf.

, откройте файл .conf и найдите строку, похожую на:

LoadModule rewrite_module modules/mod_rewrite.so

Если он закомментирован (#),раскомментируйте и перезапустите apache.


Для перезаписи журнала

RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9

Поместите вышеупомянутые 3 строки в ваш virtualhost.перезапустите httpd.

RewriteLogLevel 9 Использование высокого значения для уровня значительно замедлит ваш сервер Apache!Используйте файл перезаписи на уровне выше 2 только для отладки!Уровень 9 будет регистрировать почти все подробности переписывания.


ОБНОВЛЕНИЕ

В Apache 2.4 все изменилось:

ОТ Обновление до 2.4 с 2.2

Директивы RewriteLog и RewriteLogLevel удалены.Эта функциональность теперь обеспечивается путем настройки соответствующего уровня ведения журнала для модуля mod_rewrite с использованием директивы LogLevel .См. Также раздел ведения журнала mod_rewrite.

Подробнее о LogLevel см. Директива LogLevel

, которую вы можете выполнить

RewriteLog "/path/to/rewrite.log"

в этомсейчас

LogLevel debug rewrite_module:debug
45 голосов
/ 13 февраля 2014

Ответ «Введите некоторое количество нежелательной почты» не помог мне, мой сайт продолжал загружаться, несмотря на введенную нежелательную информацию.

Вместо этого я добавил следующую строку в начало .htaccessfile:

deny from all

Это быстро сообщит вам, если вы выбрали .htaccess или нет.Если используется .htaccess, файлы в этой папке вообще не загружаются.

32 голосов
/ 05 мая 2013

Как правило, любое изменение в .htaccess должно иметь видимые эффекты.Если нет эффекта, проверьте файлы конфигурации Apache, например:

<Directory ..>
    ...
    AllowOverride None
    ...
</Directory>

Следует изменить на

AllowOverride All

И вы сможете изменять директивы в файлах .htaccess.

5 голосов
/ 11 февраля 2012

Возможно, более логичным способом было бы создать файл (например, test.html), добавить некоторое содержимое и затем попытаться установить его в качестве страницы индекса:

DirectoryIndex test.html

По большей части правило .htaccess переопределяет конфигурацию Apache, где работает на уровне каталога / файла

3 голосов
/ 18 декабря 2018

Чтобы ответить на первый вопрос из трех заданных, простой способ проверить, работает ли файл .htaccess или нет, - вызвать пользовательскую ошибку в верхней части файла .htaccess:

ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]

На ваш второй вопрос, если файл .htaccess не читается, возможно, что основная конфигурация сервера Apache AllowOverride установлена ​​на None.В документации Apache есть советы по устранению неполадок для этого и других случаев, которые могут помешать вступлению в силу .htaccess.

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

Вывести переменную вы ссылаетесь, чтобы убедиться, что оно имеет ожидаемое вами значение:

ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=200]

Проверьте выражение независимо, поместив его в директиву <If>.Это позволяет вам убедиться, что ваше выражение написано правильно или соответствует, когда вы ожидаете:

<If "%{REQUEST_URI} =~ /word$/">
    ErrorDocument 200 "Your expression is priceless!"
    RewriteRule ^ - [L,R=200]
</If>

Счастливая отладка .htaccess!

3 голосов
/ 27 апреля 2017

Если у вас есть доступ к каталогу apache bin, который вы можете использовать,

httpd -M, чтобы сначала проверить загруженные модули.

 info_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 cache_disk_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
 version_module (shared)
 php5_module (shared)

После этого простые директивы, такие какOptions -Indexes или deny from all подтвердит правильность работы .htaccess.

1 голос
/ 25 января 2018

Чтобы проверить свои правила перезаписи htaccess, просто введите URL-адрес, к которому вы применяете правила, поместите содержимое вашего htaccess в большую область ввода и нажмите кнопку «Тест».

http://htaccess.mwl.be/

0 голосов
/ 11 февраля 2012

Почему бы не положить мусор в ваш файл .htaccess и попытаться перезагрузить apache. Если apache не запускается, вы знаете, как он работает. Удалите мусор, затем перезагрузите apache, если он загружает поздравления, которые вы настроили .htaccess правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...