Чому це працює:
RewriteRule (.+)/$ $1
і ця робота:
RewriteRule (.+)/$ $1 [L] #bla bla bla
але це не працює:
RewriteRule (.+)/$ $1 #bla bla bla
Чому це працює:
RewriteRule (.+)/$ $1
і ця робота:
RewriteRule (.+)/$ $1 [L] #bla bla bla
але це не працює:
RewriteRule (.+)/$ $1 #bla bla bla
Відповіді:
Останнє правило не працює, оскільки коментарі насправді не є коментарями. Коментарі в htaccess повинні починатися з символу #
(повинен бути на початку рядка), а не довільно ніде.
У другому випадку значення #bla bla bla
інтерпретується як 4-й параметр RewriteRule
директиви, який просто ігнорується.
В останньому випадку, значення #bla bla bla
інтерпретується як 3-й параметр, який у RewriteRule
випадку - це те, куди йдуть прапори, і #bla bla bla
це не будь-які прапори, які mod_rewrite розуміє, тому ви отримуєте помилку.
#
повинен бути на "початку" рядка, йому може передувати будь-яка кількість пробілів. (Надлишок) Пробіли в .htaccess ігноруються і можуть бути "посипані" де завгодно, включаючи на початку рядків. Іншими словами, #
повинен бути першим непробільним символом у рядку. Я помилково вважав #
, що в крайній лівій колонці повинен бути символ 1!
Формат конфігураційного файлу Apache ( .htaccess
прикладом яких є файли) технічно не підтримує вбудовані коментарі, лише повнокомандні коментарі (тобто рядок, що починається на a #
).
Рядки, що починаються з символу хешу "#", вважаються коментарями та ігноруються. Коментарі не можуть бути включені в рядок після директиви конфігурації. - Офіційне керівництво Apache 2.4
Однак, що заплутано, кожен модуль аналізує введення для своїх директив, як йому подобається - тому mod_rewrite
вирішуйте, що робити з будь-яким рядком, що починаєтьсяRewriteRule
Я точно не знаю, але я здогадуюсь, що mod_rewrite
ігнорує все після [flags]
, а #
насправді взагалі не потрібно.
Проте найкращий вибір - завжди залишати коментарі у своєму рядку, оскільки це буде працювати незалежно від директиви, яку ви коментуєте.