【问题标题】:.htaccess or httpd.conf.htaccess 或 httpd.conf
【发布时间】:2010-12-15 08:40:57
【问题描述】:

我现在需要做一个 url 重写工作。

我不知道是否应该将代码放入 .htaccess 或 httpd.conf 中?

编辑

.htaccess 的影响范围是多少?它会影响所有请求还是只影响对其所在特定目录的请求?

【问题讨论】:

    标签: apache .htaccess httpd.conf


    【解决方案1】:

    如果您不必经常更改规则,则应将它们放在 httpd.conf 中并在您的规则适用的顶级目录中关闭覆盖

    AllowOverride None
    

    如果没有覆盖,您的 apache 将不会扫描每个目录中的 .htaccess 文件,从而减少每个请求的开销。

    当你不得不改变你的规则时,如果你把它放在你的 httpd.conf 中,你将不得不重新启动你的 apache 服务器,而不是在 .htaccess 文件中立即检测到它们,因为它会在每次请求时读取它们。

    您可以使用 apachectl 工具优雅地重新启动来轻松完成此操作,以避免切断任何当前正在服务的请求。

    apachectl graceful
    

    如果您不打算关闭覆盖,您不妨只使用 .htaccess。

    编辑以响应您的编辑:

    假设你有一个 www.example.com/dir1/dir2/dir3/file 的请求

    Apache 将在所有 3 个目录中查找 .htaccess 文件,并在您允许覆盖的情况下查找适用于请求的规则的根目录。

    【讨论】:

    • 如果 AllowOverride 设置为 none,它会扫描 .htaccess 吗?
    • 不会的,如果你关闭覆盖,你必须把你所有的规则放在 httpd.conf 的 标签中。
    【解决方案2】:

    易于使用和 IMO 可维护性(只需以任何许可用户的身份转到您想要的目录)=.htaccess 但这是重复解析而不是在httpd.conf 中解析一次,您的超高音量将是最佳设置.

    【讨论】:

      【解决方案3】:

      这里有三个问题,哪个是“更好”:

      • 性能
      • 管理
      • 安全

      .htaccess 更慢,更难管理,并且可能更不安全。如果您可以访问 httpd.conf,那么在其中放置规则可以更容易管理(在一个地方),更快(“AllowOverrides None”意味着服务器不会在当前目录和任何父目录中查找覆盖文件解析和跟踪),并且由于网站目录中不存在 .htaccess 文件,因此无法编辑它们(如果创建,将被忽略)。

      【讨论】:

        【解决方案4】:

        您可以同时使用它们。恕我直言,.htaccess 会好一点

        【讨论】:

          猜你喜欢
          • 2012-02-02
          • 2015-12-16
          • 2017-12-07
          • 2010-12-04
          • 2015-02-05
          • 1970-01-01
          • 2014-12-31
          • 2015-06-07
          • 2011-07-28
          相关资源
          最近更新 更多