Як налагодити .htaccess RewriteRule не працює


115

У мене є RewriteRuleв .htaccessфайлі , який не робить нічого. Як мені це усунути?

  • Як я можу перевірити, чи .htaccessApache файл навіть читає та дотримується? Чи можу я написати ехо-повідомлення "воно працює", якщо я його напишу, де цей рядок лунатиме?
  • Якщо .htaccessфайл не використовується, як змусити Apache використовувати його?
  • Якщо .htaccessвикористовується, але RewriteRuleвсе ще не має ефекту, що я можу зробити для налагодження?

Відповіді:


144

Введіть якесь значення небажаної у вашу .htaccess напрfoo bar , sakjnaskljdnas будь-яке ключове слово , яке не розпізнається htaccess, і відвідайте вашу URL-адресу. Якщо він працює, ви повинні отримати

500 Внутрішня помилка сервера

Внутрішня помилка сервера

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

Я пропоную вам поставити це незабаром після RewriteEngine on.


Оскільки ви знаходитесь на своїй машині. Я припускаю, що у вас є доступ до apache.conf файлу .

відкрийте .confфайл і знайдіть рядок, подібний до:

LoadModule rewrite_module modules/mod_rewrite.so

Якщо це коментується (#), відмініть коментар та перезапустіть апаш.


Щоб увійти переписати журнал

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

Гаразд, проблема полягає в тому, що я намагаюся додати переписувач у файл .htaccess, і я чомусь не використовую.
мача

@macha спробуйте описаний вище метод. Якщо ви отримуєте внутрішню помилку сервера, це означає, що mod_rewrite (.htaccess) увімкнено. Ви є спільним хостом?
ThinkingMonkey

Ні, я працюю над своїм локальним господарем, чи маєте ви уявлення про те, коли завантажується файл .htaccess? Я хоч apache прочитав би це першим
мак

Файли @macha .htaccess ніколи не завантажуються. До них звертаються (якщо вони є) апашем, коли ви намагаєтесь отримати доступ до сторінки, яка присутня у цій папці.
ThinkingMonkey

ОК, моє запитання було, якщо хтось запитує веб-сторінку, чи Apache безпосередньо переходить до скриптів на стороні сервера чи він шукатиме файл .htaccess у цій папці, а потім продовжувати ??
мача

52

Відповідь "Введіть значення небажаного" не зробила для мене хитрості, мій сайт продовжував завантажуватись, незважаючи на введений сміття.

Натомість я додав наступний рядок у верхню частину файлу .htaccess:

deny from all

Це швидко дасть вам знати, чи збирається .htaccess чи ні. Якщо використовується .htaccess, файли в цій папці взагалі не завантажуватимуться.


4
Це найпростіший тест, якщо ви не заперечуєте, щоб нічого не працювали протягом декількох секунд, поки ви перевіряли.
Мордред

1
Так - у мене було близько однієї секунди, щоб переконатися, що сайт, над яким я працював, не використовує файли .htaccess.
бон

1
Дякую, працює як шарм :) врятував мені деякий час налагодження!
Martijn van Hoof

32

Як правило, будь-яка зміна .htaccess повинна мати видимі наслідки. Якщо ефекту немає, перевірте конфігураційні файли apache, наприклад:

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

Слід змінити на

AllowOverride All

І ви зможете змінювати директиви у файлах .htaccess.


Дякую. Я знайшов відповідний розділ у головному файлі apache2.conf для дерева каталогів / var / www
Тім Річардсон

6

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

DirectoryIndex test.html

Здебільшого правило .htaccess буде замінено конфігурацію Apache, коли працює на рівні каталогу / файлу


4

Щоб відповісти на перше запитання із трьох запитаних, простий спосіб зрозуміти, чи працює .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

Якщо у вас є доступ до каталогу 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

Щоб перевірити свої правила перезапису htaccess, просто заповніть URL-адресу, до якого ви застосовуєте правила, розмістіть вміст свого htaccess на більшій області введення та натисніть кнопку "Тест".

http://htaccess.mwl.be/


-1

Чому б не помістити небажаний файл у свій .htaccess файл і спробувати перезавантажити апаш. Якщо апарат не запускається, ви знаєте, що він працює. Вийміть непотріб, а потім перезавантажте apache, якщо він завантажує конграти, налаштовані вами .htaccess правильно.


7
Я не думаю, що Apache не вдасться запустити або запустити, якщо є поганий .htaccess, враховуючи, що він не перевіряє .htaccess, поки не з’явиться запит на сторінку.
Андрій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.