У меня есть RewriteRule
в файле .htaccess
, который ничего не делает. Как устранить эту проблему?
.htaccess
даже читается и выполняется Apache? Могу ли я написать эхо-сообщение "это работает", если я его напишу, где эта эхо-строка будет отображаться?.htaccess
не используется, как я могу заставить Apache использовать его?.htaccess
, но мой RewriteRule
все еще не имеет эффекта, что еще можно сделать для отладки?Введите некоторое нежелательное значение в .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 все изменилось:
Директивы RewriteLog и RewriteLogLevel удалены. Эта функциональность теперь обеспечивается путем настройки соответствующего уровня ведения журнала для модуля mod_rewrite с помощью директивы LogLevel. См. Также раздел журнала mod_rewrite.
Подробнее о LogLevel см. Директива LogLevel
вы можете выполнить
RewriteLog "/path/to/rewrite.log"
таким образом сейчас
LogLevel debug rewrite_module:debug
Ответ "Ввести какое-то нежелательное значение" не помогло, мой сайт продолжал загружаться, несмотря на введенный мусор.
Вместо этого я добавил следующую строку в верхнюю часть файла .htaccess:
deny from all
Это быстро сообщит вам, будет ли получен .htaccess или нет. Если используется .htaccess, файлы в этой папке не будут загружаться вообще.
Как правило, любое изменение в .htaccess должно иметь видимые эффекты. Если нет эффекта, проверьте конфигурационные файлы apache, например:
<Directory ..>
...
AllowOverride None
...
</Directory>
Следует изменить на
AllowOverride All
И вы сможете изменять директивы в файлах .htaccess.
Возможно, более логичным методом было бы создать файл (например, test.html), добавить некоторый контент и затем попытаться установить его как индексную страницу:
DirectoryIndex test.html
По большей части правило .htaccess переопределяет конфигурацию Apache, где работает на уровне каталога/файла
Если у вас есть доступ к каталогу 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 работают правильно.
Чтобы проверить свои правила перезаписи htaccess, просто введите URL-адрес, к которому вы применяете правила, поместите содержимое вашего htaccess в большую область ввода и нажмите кнопку "Проверить".
Чтобы ответить на первый вопрос из трех заданных, простой способ проверить, работает ли файл.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!
Почему бы не поместить некоторый барахл в ваш файл .htaccess и попытаться перезагрузить apache. Если apache не запускается, вы знаете его работу. Удалите мусор, а затем перезагрузите apache, если он загружает congrats, которые вы настроили .htaccess правильно.