为什么这样做:
RewriteRule (.+)/$ $1
和这项工作:
RewriteRule (.+)/$ $1 [L] #bla bla bla
但这不起作用:
RewriteRule (.+)/$ $1 #bla bla bla
Answers:
最后一条规则不起作用,因为注释不是真正的注释。htaccess中的注释必须以#
(必须在一行的开始),而不是随意的任何地方。
在第二种情况下,将#bla bla bla
解释为RewriteRule
指令参数将被忽略。
在最后一种情况下,会#bla bla bla
被解释为第3个参数,在RewriteRule
的情况下,这是标志所在的位置,而#bla bla bla
不是mod_rewrite可以理解的任何标志,因此会出现错误。
#
必须在该行的“开始”位置,但可以在其前面加上任意数量的空格。(过多).htaccess中的空格将被忽略,并且可以“散布”到任何位置,包括行首。换句话说,#
必须是一行上的第一个非空白字符。我#
曾经错误地认为必须在最左侧一栏中输入字符1!
Apache的配置文件格式(其中.htaccess
文件就是一个例子),在技术上不支持嵌入式的意见,只完整行的注释(即一行开始了#
)。
以井号字符“#”开头的行被视为注释,并被忽略。配置指令后的行中可能不能包含注释。- 官方Apache 2.4手册
但是,令人困惑的是,每个模块都可以根据自己的喜好来解析其指令的输入-因此 mod_rewrite
决定对以RewriteRule
我不确定,但是我的猜测mod_rewrite
是忽略[flags]
,和之后的所有内容。#
实际上根本没有必要。
不过,最好的选择是始终将注释保持在自己的行上,因为无论您要注释的指令如何,该注释都将起作用。