向 .htaccess 添加注释

Posted

技术标签:

【中文标题】向 .htaccess 添加注释【英文标题】:Adding comments to .htaccess 【发布时间】:2014-04-02 03:31:00 【问题描述】:

为什么会这样:

RewriteRule (.+)/$ $1

这项工作:

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

但这不起作用:

RewriteRule (.+)/$ $1 #bla bla bla

【问题讨论】:

【参考方案1】:

.htaccess 中的注释必须单独一行,而不是附加到其他语句中。

最后一条规则不起作用,因为 cmets 并不是真正的 cmets。 htaccess 中的注释必须以# 开头(必须在行首),而不是任意位置。

在第二种情况下,#bla bla bla 被解释为RewriteRule 指令的第四个参数,它被简单地忽略了。

在最后一种情况下,#bla bla bla 被解释为第三个参数,在RewriteRule 的情况下是标志所在的位置,#bla bla bla 不是 mod_rewrite 理解的任何标志,所以你得到一个错误。

【讨论】:

建议编辑答案以说出“# 必须在行首”之类的内容。无论如何,谢谢! @user1032531 对不起,我就是这个意思 cmets 可以在 中吗? 这是我反复学习过的东西。它会浪费几个小时。谢谢。 虽然# 必须位于行的“开始”,但它前面可以有任意数量的空格。 (多余的).htaccess 中的空格被忽略,并且可以“洒”在任何地方,包括行首。换句话说,# 必须是一行中的第一个非空白字符。我曾经错误地认为# 必须是字符 1,在最左边的列中!【参考方案2】:

Apache 的配置文件格式(其中.htaccess 文件是一个示例)在技术上不支持内联cmets,仅支持全行cmets(即# 开头的一行)。

以哈希字符“#”开头的行被视为 cmets,并被忽略。配置指令后的一行不能包含注释。 -- Official Apache 2.4 manual

然而,令人困惑的是,每个模块都可以根据自己的喜好解析其指令的输入 - 所以mod_rewrite 决定如何处理以RewriteRule 开头的任何行

我不确定,但我猜mod_rewrite 会忽略[flags] 之后的所有内容,而# 实际上根本不需要。

不过,最好的办法是始终让 cmets 保持自己的路线,因为无论您评论的指令如何,这都会起作用。

【讨论】:

以上是关于向 .htaccess 添加注释的主要内容,如果未能解决你的问题,请参考以下文章

wordpress 插件开发添加到 htaccess 文件中

调试 .htaccess 的流行技术

使用 .htaccess 为每个请求添加一个标头

通过 .htaccess 在文件前添加指定标签

PHP & .htaccess:为多个目录添加文件

使用htaccess只能访问唯一的入口文件