Czy musisz ponownie uruchomić Apache, aby reguły ponownego zapisu w .htaccess zaczęły obowiązywać?

99

Wysłałem moje pliki .htaccess do serwerów produkcyjnych, ale one nie działają. Czy następnym krokiem byłby restart, czy powinienem sprawdzić coś innego.

Jesse Hattabaugh
źródło

Odpowiedzi:

94

Ponowne uruchomienie nie jest wymagane w przypadku zmian w .htaccess. Coś innego jest nie tak.

Upewnij się, że Twój .htaccess zawiera oświadczenie

RewriteEngine włączony

który jest wymagany, nawet jeśli jest również obecny w httpd.conf. Sprawdź również, czy plik .htaccess jest czytelny dla procesu httpd.
Sprawdź error_log - poinformuje Cię o błędach w pliku .htaccess, jeśli jest używany. Umieszczenie celowego błędu składniowego w .htaccess jest dobrym sprawdzeniem, czy plik jest używany - powinieneś otrzymać błąd 500 na dowolnej stronie w tym samym katalogu.

Na koniec możesz włączyć przepisywanie dziennika za pomocą poleceń, takich jak poniższe w pliku httpd.conf:

RewriteLog „logs / rewritelog”

RewriteLogLevel 7

Wygenerowany w ten sposób plik dziennika zawiera krwawe szczegóły dotyczące dopasowanych reguł przepisywania i sposobu ich obsługi.

TomG
źródło
3
To jest trochę przestarzałe. Natknąłem się na podobny problem i chciałem debugować moje przeróbki dla konkretnego przypadku użycia. Wypróbowałem tę metodę, ale po małej frustracji i kopaniu, zorientowałem się, w czym tkwi problem. Dotyczy to starszych wersji Apache. Dla apache2.4> wymienić RewriteLog & LogLevel powyżej: LogLevel alert rewrite:trace7. Po ponownym uruchomieniu Apache powinieneś zobaczyć ślady w error.log Mam nadzieję, że to pomoże. http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Casper Wilkes
52

Nie :

Apache pozwala na zdecentralizowane zarządzanie konfiguracją za pomocą specjalnych plików umieszczonych w drzewie WWW. Pliki specjalne są zwykle wywoływane .htaccess, ale w dyrektywie AccessFileName można określić dowolną nazwę ... Ponieważ pliki .htaccess są odczytywane przy każdym żądaniu, zmiany wprowadzone w tych plikach mają natychmiastowy skutek ...

Milen A. Radev
źródło
Jeśli dodałeś nazwę użytkownika do opcji „Wymagaj użytkownika” w pliku z włączonymi witrynami, empirycznie stwierdziłem, że potrzebujesz ponownego uruchomienia. Robi to wdzięczny.
Ross
18

Z dokumentacji Apache: Najczęściej problem polega na tym, że AllowOverride nie jest ustawione w taki sposób, że dyrektywy konfiguracyjne są honorowane. Upewnij się, że dla danego zakresu pliku nie obowiązuje opcja AllowOverride None. Dobrym testem jest umieszczenie śmieci w pliku .htaccess i ponowne załadowanie. Jeśli błąd serwera nie jest generowany, prawie na pewno obowiązuje opcja AllowOverride None.

PiedPiper
źródło
1
Upuszczanie linku do Apache - AllowOverride: httpd.apache.org/docs/2.2/mod/core.html#AllowOverride
scunliffe
2
Dodaję tę linię „<katalog /> </directory>” do mojego .htaccess, aby wygenerować błąd w dzienniku. Powie "<Katalog niedozwolony tutaj" i wiem, że czyta mój plik.
Mnebuerquo
3

Tylko jeśli nie dodałeś modułu mod_rewrite do Apache.

Musisz ponownie uruchomić Apache tylko wtedy, gdy zmienisz jakiekolwiek pliki Apache „.conf”.

etyczny
źródło
2

Mam ten sam problem i wydaje się, że post PiedPiper o AllowOverride był najbardziej pomocny. Sprawdź plik httpd.conf pod kątem „AllowOverride” i upewnij się, że jest ustawiony na All.

Dave Ip
źródło
1
Odpowiedni post: Jak ustawić AllowOverride all
Zach Saucier
2

W przypadku .htaccess restart nie jest wymagany, jeśli nie działa, prawdopodobne przyczyny obejmują.

  • AllowOverride Nie można ustawić, którego użytkownika można ustawić w pliku httpd.conf lub może być konieczne skontaktowanie się z administratorem serwera.

  • Sprawdź nazwę pliku .htaccess, powinna to być .htaccess, a nie htaccess.txt. Tutaj znajdziesz poradnik, jak go utworzyć.

  • Spróbuj użyć prostej dyrektywy Options -Indexeslub deny allczegoś w rodzaju prostej dyrektywy, aby sprawdzić, czy działa, czy nie.

  • czyść pamięć podręczną przeglądarki za każdym razem, jeśli masz regułę dla przekierowań lub podobną, jeśli poprzednie przekierowanie jest buforowane, wygląda na to, że coś nie działa.

Abhishek Gurjar
źródło
0

Co jest w twoim .htaccess? RewriteRules? Sprawdź, czy mod_rewrite jest zainstalowany i włączony.

Inne rzeczy? Spróbuj ustawić AllowOverride na „all” w tym katalogu.

ceejayoz
źródło