是否可以在.htaccess中包含来自另一个htaccess文件的规则?
.htaccess
RewriteEngine On
RewriteCond ...
RewriteRule ...
Include .htaccess1
.
.
Include .htaccess2
这样做会给出500.此处不允许包含 有没有办法做到这一点 ?因为我非常需要这个。
答案 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步......
创建您的IP文件以拒绝。它可以是.php文件,.txt文件,甚至是.csv文件。
创建.php(或您选择的语言)脚本,其目的是输出名为&#34; .htaccess&#34;的文件。
每次将IP文件更新为Deny时,请运行上述2).php脚本,并为每个域输出新的.htaccess。
如果除了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