包含.htaccess中的另一个htaccess文件

时间:2012-11-30 07:04:16

标签: .htaccess

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

.htaccess

RewriteEngine On
RewriteCond ...
RewriteRule ...

Include .htaccess1
.
.
Include .htaccess2

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

4 个答案:

答案 0 :(得分:48)

您不能包含htaccess文件中其他文件的规则,语句,定义或指令。 Include指令不能在htaccess文件中使用。 htaccess文件的一部分内容与<Directory>块的行为类似,但是是自包含的,无法访问目录本身之外的东西(子目录没问题),更具体地说,没有文档根目录之外的东西。这样,通过黑客攻击htaccess文件,做恶意事情的人将无法指向请求或包含其他目录中的文件/内容。

具体来说,在mod_rewrite的范围内,RewriteOptions允许inheriting rewrite rules from the htaccess file from a parent directory的选项,但没有任何内容可以随意包含规则。

答案 1 :(得分:3)

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

以为我会为其他任何可能偶然发现这篇文章的人添加这个想法。

答案 2 :(得分:3)

有可能 - 分2-3步......

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

  2. 创建.php(或您选择的语言)脚本,其目的是输出名为&#34; .htaccess&#34;的文件。

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

  4. 如果除了IP之外还有拒绝语句,请在.php脚本中对它们进行硬编码以便先输出。见https://www.askapache.com/htaccess/

    .php脚本通常看起来像:

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

    然后,当你为DENY部分做好准备时:

    $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>";
    

    如果您有多个域,那么请拥有这些域名路径的数组,并预先获取该数组,并将fwrite添加到每个路径。

    如果某些域已经具有.htaccess要求,请将其放在可读的.txt文件中...执行file_get_contents(on that),&#34; output =&#34;然后,添加&#34; Deny&#39;然后&#34;输出。= ...&#34;每个人都在&#34; foreach()&#34;循环。

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

    .htaccess文件无法包含()&#34;其他文件,但.php脚本可以和.php脚本可以输出名为&#34; .htaccess&#34;的文件,可以通过脚本构建。

    上面的方法有效,当我需要创建&#34; RewriteRule&#34;的行时,我就开始这样做了。对于我的每个产品目录!每次我添加一个新产品,我运行我的脚本,输出一个新的.htaccess文件...从我的SQL产品表构建。与我的.php脚本类似,&#34; fwrite&#34; s我的sitemap.xml。

    (我希望没有.php标点符号或&#34; $&#34;在此输入中丢失了。)

答案 3 :(得分:-2)

您可以创建像PHP“.htaccess.php”这样的服务器端脚本,并在内部添加您的包含。当然,您必须配置apache: AccessFileName .htaccess.php