为什么这样做:
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],和之后的所有内容。#实际上根本没有必要。
不过,最好的选择是始终将注释保持在自己的行上,因为无论您要注释的指令如何,该注释都将起作用。