是否可以在.htaccess中包含来自另一个htaccess文件的规则?包含来自.htaccess的另一个htaccess文件
.htaccess
RewriteEngine On
RewriteCond ...
RewriteRule ...
Include .htaccess1
.
.
Include .htaccess2
这样做给人一种500包括不在这里 不允许有没有办法做到这一点?因为我非常需要这个。
是否可以在.htaccess中包含来自另一个htaccess文件的规则?包含来自.htaccess的另一个htaccess文件
.htaccess
RewriteEngine On
RewriteCond ...
RewriteRule ...
Include .htaccess1
.
.
Include .htaccess2
这样做给人一种500包括不在这里 不允许有没有办法做到这一点?因为我非常需要这个。
您不能包含来自htaccess文件的其他文件的规则,语句,定义或指令。 Include
指令不能在htaccess文件中使用。 htaccess文件的一部分内容与<Directory>
块的行为类似,但是是自包含的,无法访问目录本身之外的东西(子目录可以),但更具体地说,文档根目录之外没有任何东西。这样,有人做恶意的事情将无法通过黑客攻击htaccess文件来指出请求或包含来自其他目录的文件/内容。
在mod_rewrite的范围中,具体来说,RewriteOptions
的选项允许inheriting rewrite rules from the htaccess file from a parent directory,但没有任何内容随意在任何地方包含规则。
我知道这可能有点晚,但如果您试图实施IP禁令或类似类型的动态规则内容,请使用.htaccess文件中最后一条规则将请求指向单个.php或执行此功能的类似语言脚本(您的单一脚本可以以您自己的格式加载动态规则,并根据您实际尝试完成的操作做出与Apache相同的决定),然后将请求传递到实际页面被请求。它为整个请求处理添加了一个层,但为所有页面提供了相同的动态功能,而无需为服务器生成直接规则,并尝试让Apache为您做出决定。
只是想我会添加这个想法的任何人可能偶然发现这个帖子寻找类似的东西。
我想看看如何做到这一点,如果任何人都可以提供的例子。 – authentictech
一个简单的路由器? https://github.com/moagrius/RegexRouter – Jonathan
@Jonathan我觉得你给我带来了如此接近我寻求的解决方案,但我仍然处于黑暗中。我的目标是导入禁止的IP列表,然后加载WordPress的index.php – Jay
您可以创建服务器端脚本,如PHP“.htaccess.php”,并在里面放置你的包含。当然,你必须配置apache: AccessFileName .htaccess.php
这是可能的 - 在2-3步......
创建您的IP地址的文件拒绝。它可能是一个.php文件,.txt文件,甚至.csv文件。
创建一个.php(或您选择的语言)脚本,其目的是输出一个名为“.htaccess”的文件。
每当您将您的IP文件更新为拒绝时,运行上述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>";
如果你有多个域,那么有一个这些域名的路径的数组,然后foreach该数组,并fwrite到每个路径。
如果某些域已经具有.htaccess需求,将其放在一个可读的.txt文件中......做一个file_get_contents(在那个),“output =”,添加“Deny's,然后”输出。 ”每一个‘的foreach()’循环。
反正......你已经做了所有这些事情之前...只是每种技术适用于这种情况。
.htaccess文件不能“include()”其他文件,但.php脚本可以,而.php脚本可以输出名为“.htaccess”的文件,可以通过脚本来构建。
上述方法有效,我需要为我的每个产品目录创建“RewriteRule”行!每次添加新产品时,我都运行我的脚本,输出一个新的.htaccess文件...从我的产品SQL表中构建。与我的.php脚本类似,“fwrite”是我的sitemap.xml。
(我希望没有.PHP标点符号或“$”符号在这个打字迷路了。)
将只有1'的文件夹位置 – diEcho
是的,我明白.htacess'。但是,我们可以像在apache2.conf中那样在外部包含它吗? .htaccess说包括htaccessfiles/ – EPQRS