Версия для печати
13
Фев
2008

.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
#

По теме:

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


Антиспам-картинка