.htaccess to httpd.conf
Есть большой проект с кучей разнородных директорий и поддиректорий, в каждой нужны какие-то особые правила: сюда пущать, сюда не пущать, здесь можно показывать список файлов в директории, а тут низя.
Писать огромный конфиг с большим количеством директив <Directory></Directory> было лень, да и потестить хотелось оперативно. Потому разрешил «AllowOverride All», разложил по нужным дирам/поддирам .htaccess файлы. Отладил, проверил — работает как надо. Встал вопрос перенести это в httpd.conf
Причин перенести несколько:
1. «AllowOverride All» заставляет Apache при каждом запросе перечитывать дерево папок в поисках .htaccess файлов. При большом количестве вложений — производильность сервера проседает.
2. Защититься от подмены .htaccess. К конфигу Апача доступа ни у кого нет, а .htaccess заменить могут.
Начал искать что-нить, что умеет искать все .htaccess и объединять в виде, который можно добавить в конфиг Апача. Где-то это видел и даже думал, что в закладки положил, а не нашел. Пошел гуглить — ничего хорошего не нагуглил.
Плюнул и написал свой скрипт: htaccesstohttpd.sh
#!/usr/bin/env bash
# This script takes a path to the DocumentRoot on the commandline.
# It will find all .htaccess files in the root directory hierarchy
# and create htaccesstohttpd.conf in apache
# importable file format.
#
# Copyright (C) 2008 Kocmuk.ru
#
if [ -z $1 ]; then
DROOT=`pwd`
else
DROOT=$1
fi
HTDIRS=`find $DROOT -name '.htaccess' -type f | sed "s|/[^/]*$||g"`
for HTPATH in $HTDIRS; do
echo -e "\n## BEGIN from ${HTPATH}/.htaccess"
echo -e ""
cat ${HTPATH}/.htaccess
echo -e "\n "
echo -e "## END"
done
Принимает в командной строке путь, с которого нужно начинать поиск .htaccess. Если ничего не указать — ищет с текущей диры. Результат его работы — это директива <Directory> с содержимым .htaccess внутри.
Далее можно перенаправить вывод в файл:
./htaccesstohttpd.sh /var/www/htdocs > httpd-htaccess.conf
B заинклюдить его в httpd.conf:
# httpd.conf Include conf/httpd-htaccess.conf #









Оставить комментарий