it-swarm.com.ru

Как отладить .htaccess RewriteRule не работает

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

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

Введите какое-нибудь нежелательное значение в свой .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
140
ThinkingMonkey

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

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

deny from all

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

45
caitriona

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

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

Должен быть изменен на 

AllowOverride All

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

32
jgpATs2w

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

DirectoryIndex test.html

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

5
Cez

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

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.

3
Abhishek Gurjar

Чтобы ответить на первый вопрос из трех заданных, простой способ проверить, работает ли файл .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!

2
PeterA

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

http://htaccess.mwl.be/

1
Ganesh Kandu