【问题标题】:Include another htaccess file from .htaccess包含来自 .htaccess 的另一个 htaccess 文件
【发布时间】:2012-11-18 09:30:14
【问题描述】:

是否可以在 .htaccess 中包含来自另一个 htaccess 文件的规则?

.htaccess

RewriteEngine On
RewriteCond ...
RewriteRule ...

Include .htaccess1
.
.
Include .htaccess2

这样做会得到 500。此处不允许包含 有没有办法做到这一点 ?因为我非常需要这个。

【问题讨论】:

  • 文件夹位置只有 1 个.htacess
  • 是的,我明白这一点。但是我们可以像在 apache2.conf 中那样在外部包含它吗? .htaccess 说包括 htaccessfiles/
  • txt 文件中的 IP BAN 列表 - stackoverflow.com/questions/13008242/…

标签: .htaccess


【解决方案1】:

您不能在 htaccess 文件中包含来自其他文件的规则、语句、定义或指令。 Include 指令不能在 htaccess 文件中使用。 htaccess 文件的部分要点是类似于<Directory> 块,但它是自包含的,无法访问目录本身之外的东西(子目录可以),但更具体地说,在文档根目录之外没有任何东西。这样,做恶意行为的人将无法通过入侵 htaccess 文件来指向请求或包含来自其他目录的文件/内容。

特别是在 mod_rewrite 的范围内,RewriteOptions 有允许inheriting rewrite rules from the htaccess file from a parent directory 的选项,但不能随意包含任何地方的规则。

【讨论】:

    【解决方案2】:

    我知道这可能有点晚了,但是如果您尝试实施 IP 禁令或类似类型的动态规则内容,请使用 .htaccess 文件中的最后一条规则将请求指向单个 . php 或执行此功能的类似语言脚本(您的单个脚本可以以您自己的格式加载动态规则,并根据您实际尝试完成的内容做出与 Apache 相同的决定)然后将请求传递到实际页面请求。它为整个请求处理添加了一层,但为所有页面提供了相同的动态功能,而无需为服务器生成直接规则并尝试让 Apache 为您做出决定。

    只是想我会为其他可能偶然发现这篇文章并寻找类似内容的人添加这个想法。

    【讨论】:

    • 如果有人可以提供的话,我想看看如何做到这一点的示例。
    • @Jonathan 我觉得你让我如此接近我所寻求的解决方案,但我仍然在黑暗中。我的目标是导入禁止 IP 列表,然后加载 Wordpress 的 index.php
    • @Jay 如果您在 apache 中使用 htaccess 文件,只需查找 htaccess ban ips。如果你使用的是 nginx,你也可以在那里进行。如果您想以编程方式执行此操作,那是您自己的堆栈溢出问题
    • 是的,我已经在 htaccess 中禁止了 IP,但是为 50 多个站点更新它们是一件痛苦的事情。我基本上需要一个@import:site.com/banlist.txt。
    【解决方案3】:

    您可以创建像 PHP ".htaccess.php" 这样的服务器端脚本,并在里面放置您的包含。当然,你必须配置apache: 访问文件名 .htaccess.php

    【讨论】:

      【解决方案4】:

      这是可能的 - 分 2-3 步...

      1. 创建要拒绝的 IP 文件。它可以是 .php 文件、.txt 文件,甚至是 .csv 文件。

      2. 创建一个 .php(或您选择的语言)脚本,其目的是输出一个名为“.htaccess”的文件。

      3. 每次您将 IP 文件更新为拒绝时,运行上述 2) .php 脚本,并向您的每个域输出一个新的 .htaccess。

      如果除了 IP 之外还有要拒绝的语句,请将它们硬编码到 .php 脚本中以首先输出。见https://www.askapache.com/htaccess/

      .php 脚本通常如下所示:

      $output = "statement1".PHP_EOL;
      $output .= "statement2".PHP_EOL;
      $output .= "statement3".PHP_EOL;
      ...
      

      然后,当您准备好拒绝部分时:

      $denyList = file_get_contents("the/list/of/IPs.txt"); // or .php etc.
      $ArrayDenyList = explode(PHP_EOL,$denyList); // or your line ending character, if necessary
      foreach($ArrayDenyList as $key =>$value) {
      $output .= 'Deny from '.$value.PHP_EOL;
        }
      

      然后写入文件:(你可能有一个标准的方式):

      $handle = fopen(.htaccess,"w"); //complete path if in another domain
      fwrite($handle,$output);
      fclose($handle);
      echo "Success - <p>";
      

      如果您有多个域,则有一个包含这些域名路径的数组,并 foreach 该数组,并写入每个路径。

      如果某些域已经有 .htaccess 要求,请将其放入可读的 .txt 文件中...执行 file_get_contents(在此之上),“输出 =”,添加“拒绝”,然后“输出 .= ... " 每个都在 "foreach()" 循环中。

      无论如何...您之前已经完成了所有这些事情...只需将每种技术应用于此场景即可。

      .htaccess 文件不能“include()”其他文件,但 .php 脚本可以,.php 脚本可以输出名为“.htaccess”的文件,可以通过脚本构建。

      上述方法有效,当我需要为我的每个产品目录创建“RewriteRule”行时,我就开始这样做了!每次我添加一个新产品时,我都会运行我的脚本来输出一个新的 .htaccess 文件......从我的产品 SQL 表构建。类似于“fwrite”我的 sitemap.xml 的 .php 脚本。

      (我希望没有 .php 标点符号或“$”在这种输入中丢失。)

      【讨论】:

      • 例如我想在 www.domain2.com 中使用 www.domain2.com 中的 htaccess 文件。请清楚地编写代码。哪个文件包含这些代码?我把这个文件放在哪里。请帮忙。
      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2014-03-17
      • 1970-01-01
      • 2011-11-26
      • 2014-06-04
      • 2014-10-06
      • 1970-01-01
      相关资源
      最近更新 更多