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
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 bla
jest on interpretowany jako czwarty parametr RewriteRule
dyrektywy, który jest po prostu ignorowany.
W ostatnim przypadku, #bla bla bla
jest on interpretowany jako trzeci parametr, który w tym RewriteRule
przypadku jest miejscem, do którego trafiają flagi, i #bla bla bla
nie ma żadnych flag, które mod_rewrite rozumie, więc pojawia się błąd.
#
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!Format pliku konfiguracyjnego Apache (
.htaccess
jednym 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#
).Mylące jest jednak to, że każdy moduł analizuje dane wejściowe pod kątem swoich dyrektyw, jak chce - więc
mod_rewrite
decyduje, co zrobić z każdą linią zaczynającą się odRewriteRule
Nie wiem na pewno, ale przypuszczam, że
mod_rewrite
ignoruje 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.
źródło