Включить другой файл htaccess из .htaccess
Можно ли включать правила из другого файла htaccess в .htaccess?
.htaccess
RewriteEngine On
RewriteCond ...
RewriteRule ...
Include .htaccess1
.
.
Include .htaccess2
Выполнение этого дает 500. Include not allowed here
Есть ли способ сделать это? Потому что мне это очень плохо.
Ответы
Ответ 1
Вы не можете включать правила, инструкции, определения или директивы из других файлов из файла htaccess. Директива Include
не может использоваться внутри файла htaccess. Часть точки файла htaccess должна действовать аналогично блоку <Directory>
, но быть автономной и неспособной получить доступ к вещам вне самого каталога (подкаталоги в порядке), но более конкретно ничего за пределами корня документа. Таким образом, кто-то, делающий вредоносные вещи, не сможет указывать запросы или включать файлы/содержимое из других каталогов, взломав файл htaccess.
В частности, в mod_rewrite существуют опции для RewriteOptions
, которые позволяют наследовать правила перезаписи из файла htaccess из родительского каталога, но ничто, чтобы произвольно включать правила из любого места.
Ответ 2
Я знаю, что это может быть немного запоздалым, но вместо этого, если вы пытаетесь реализовать запрет IP или аналогичный тип содержимого динамического правила, используйте последнее правило в вашем файле .htaccess, чтобы указать запрос в одном. php или аналогичный languaged script, который выполняет эту функцию (ваш единственный script может загружать динамические правила в вашем собственном формате и принимать то же решение, что и Apache, в зависимости от того, что вы на самом деле пытаетесь выполнить), затем передает запрос на запрашиваемая фактическая страница. Он добавляет слой для всей обработки запроса, но дает одну и ту же динамическую функцию для всех страниц без необходимости создавать прямые правила для сервера и пытается заставить Apache принимать решения за вас.
Просто подумал, что я бы добавил эту мысль для всех, кто может наткнуться на это сообщение, ища что-то подобное.
Ответ 3
Вы можете создать серверную часть script, такую как PHP.htaccess.php, и внутри включить ваши включенные. Конечно, вы должны настроить apache:
AccessFileName.htaccess.php
Ответ 4
Возможно - в 2-3 шага...
-
Создайте свой файл IP для отказа. Это может быть файл .php,.txt, даже CSV файл.
-
Создайте .php(или язык по вашему выбору) script, целью которого является вывод файла с именем .htaccess.
-
Каждый раз, когда вы обновляете свой файл IP-адресов на "Запретить", запустите указанный 2).php script и выпустите новый .htaccess для каждого из своих доменов.
Если у вас есть инструкции в дополнение к IP-адресам Deny, сначала скопируйте их в свой .php script для вывода. См. 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... сделайте файл_get_contents (на этом), "output =", добавьте "Deny's, then" output. =... "каждый в цикле foreach()".
В любом случае... вы все это делали раньше... просто применяйте каждую технику к этому сценарию.
Файл .htaccess не может "включать()" другие файлы, но может быть .php script, а скрипты .php могут выводить файлы с именем ".htaccess", которые могут быть созданы с помощью script.
Вышеуказанный метод работает, и я начал делать это, когда мне нужно было создавать строки "RewriteRule" для каждого из моих каталогов продуктов! Каждый раз, когда я добавляю новый продукт, я запускаю свой script, который выводит свежий файл .htaccess... построенный из моей таблицы SQL-продуктов. Подобно моему .PHP скрипт, что "fwrite" s мой sitemap.xml.
(Надеюсь, в этом типе не будет препинания .php или "$" ).