Подтвердить что ты не робот

Включить другой файл htaccess из .htaccess

Можно ли включать правила из другого файла htaccess в .htaccess?

.htaccess

RewriteEngine On
RewriteCond ...
RewriteRule ...

Include .htaccess1
.
.
Include .htaccess2

Выполнение этого дает 500. Include not allowed here Есть ли способ сделать это? Потому что мне это очень плохо.

4b9b3361

Ответ 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 или "$" ).