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

为什么会这样:

RewriteRule (.+)/$ $1

这项工作:

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

但这不起作用:

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

【问题讨论】:

    标签: apache .htaccess comments


    【解决方案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 保持自己的路线,因为无论您评论的指令如何,这都会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多