Добавление комментариев в .htaccess

89

Почему это работает:

RewriteRule (.+)/$ $1

и эта работа:

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

но это не работает:

RewriteRule (.+)/$ $1 #bla bla bla
user1032531
источник

Ответы:

143

Комментарии в .htaccess должны быть в отдельной строке , а не добавляться к другим операторам.

Последнее правило не работает, потому что комментарии на самом деле не являются комментариями. Комментарии в htaccess должны начинаться с символа #(должны быть в начале строки), а не где угодно.

Во втором случае #bla bla blaинтерпретируется как 4-й параметр RewriteRuleдирективы, который просто игнорируется.

В последнем случае #bla bla blaинтерпретируется как 3-й параметр, который в RewriteRuleслучае является местом, куда идут флаги, а #bla bla blaне какие-либо флаги, которые понимает mod_rewrite, поэтому вы получаете ошибку.

Джон Лин
источник
7
Рекомендуем отредактировать ответ, указав что-то вроде «# должен быть в начале строки». Тем не менее, спасибо!
user1032531
@ user1032531 Извините, это то, что я хотел сказать
Джон Лин
Могут ли комментарии быть внутри <IfModule>?
Дэниел Спрингер
Это то, что я переучивал много раз. Это может тратить часы. Спасибо.
Xonatron
1
Хотя он #должен находиться в «начале» строки, ему может предшествовать любое количество пробелов. (Превышение) Пробелы в .htaccess игнорируются и могут быть «разбросаны» где угодно, в том числе в начале строк. Другими словами, он #должен быть первым непробельным символом в строке. Я ошибочно думал #, что в крайнем левом столбце должен стоять символ 1!
SherylHohman
29

Формат файла конфигурации Apache ( .htaccessодним из примеров которого являются файлы) технически не поддерживает встроенные комментарии, а только полнострочные комментарии (т. Е. Строку, начинающуюся с символа a #).

Строки, начинающиеся с символа решетки «#», считаются комментариями и игнорируются. Комментарии не могут быть включены в строку после директивы конфигурации. - Официальное руководство Apache 2.4

Тем не менее, что сбивает с толку, каждый модуль может анализировать ввод для своих директив, как ему нравится - поэтому mod_rewriteрешает, что делать с любой строкой, начинающейся сRewriteRule

Я не знаю наверняка, но предполагаю, что mod_rewriteигнорируется все, что находится после [flags], и на #самом деле это вообще не нужно.

Однако лучше всего всегда оставлять комментарии в своей строке, поскольку это будет работать независимо от директивы, которую вы комментируете.

IMSoP
источник