Dodawanie komentarzy do .htaccess

89

Dlaczego to działa:

RewriteRule (.+)/$ $1

i ta praca:

RewriteRule (.+)/$ $1 [L] #bla bla bla

ale to nie działa:

RewriteRule (.+)/$ $1 #bla bla bla
user1032531
źródło

Odpowiedzi:

143

Komentarze w .htaccess muszą znajdować się w osobnym wierszu i nie mogą być dołączane do innych instrukcji.

Ostatnia zasada nie działa, ponieważ komentarze tak naprawdę nie są komentarzami. Komentarze w htaccess muszą zaczynać się od #(muszą znajdować się na początku wiersza), a nie w dowolnym miejscu.

W drugim przypadku #bla bla blajest on interpretowany jako czwarty parametr RewriteRuledyrektywy, który jest po prostu ignorowany.

W ostatnim przypadku, #bla bla blajest on interpretowany jako trzeci parametr, który w tym RewriteRuleprzypadku jest miejscem, do którego trafiają flagi, i #bla bla blanie ma żadnych flag, które mod_rewrite rozumie, więc pojawia się błąd.

Jon Lin
źródło
7
Zaleca się edytowanie odpowiedzi, na przykład „# musi znajdować się na początku wiersza”. Mimo wszystko dziękuję!
user1032531
@ user1032531 Przepraszam, to właśnie miałem na myśli
Jon Lin
Czy komentarze mogą znajdować się wewnątrz <IfModule>?
Daniel Springer
To jest coś, czego nauczyłem się na nowo wiele razy. Może marnować godziny. Dziękuję Ci.
Xonatron
1
Chociaż #musi znajdować się na „początku” wiersza, może być poprzedzony dowolną ilością białych znaków. (Nadmiar) Białe znaki w .htaccess są ignorowane i można je „posypać” w dowolnym miejscu, w tym na początku wierszy. Innymi słowy, #musi być pierwszym niebiałym znakiem w wierszu. Błędnie myślałem, że #musi to być znak 1, w lewej kolumnie!
SherylHohman
29

Format pliku konfiguracyjnego Apache ( .htaccessjednym z przykładów są pliki) nie obsługuje technicznie komentarzy w wierszu, a jedynie komentarze pełnowierszowe (tj. Wiersz zaczynający się od a #).

Wiersze zaczynające się od znaku krzyżyka „#” są uważane za komentarze i są ignorowane. Komentarze nie mogą być umieszczane w wierszu po dyrektywie konfiguracyjnej. - Oficjalna instrukcja Apache 2.4

Mylące jest jednak to, że każdy moduł analizuje dane wejściowe pod kątem swoich dyrektyw, jak chce - więc mod_rewritedecyduje, co zrobić z każdą linią zaczynającą się odRewriteRule

Nie wiem na pewno, ale przypuszczam, że mod_rewriteignoruje wszystko po znaku [flags], a #to nie jest wcale konieczne.

Najlepiej jednak jest zawsze zachować komentarze do własnej linii, ponieważ będzie to działać niezależnie od komentowanej dyrektywy.

IMSoP
źródło