Как определить параметры / константы в файлах Apache .htaccess
У меня нет доступа к файлам конфигурации сервера Apache, и я могу влиять на конфигурацию только через .htaccess
файлы. К сожалению, это ограничивает некоторые вещи, которые можно захотеть сделать. Например, самый простой способ перенаправить все HTTP-запросы на HTTPS:
<If "% != 'on'"> Redirect permanent / https://www.my-domain.com/ </If>
Однако это вынуждает меня жестко закодировать доменное имя, поэтому я не могу .htaccess
легко повторно использовать этот файл. В моем случае, один и тот же сайт может быть доступен из нескольких разных доменов (только с одной базовой файловой системой), так что это вообще не вариант для меня. Я не могу решить эту проблему путем перенаправления, https://%/
так как Redirect
оператор не поддерживает этот тип подстановки переменных ( за исключением разделов <Location>
или<LocationMatch>
, но, конечно, они не доступны для .htaccess
файлов ).
Так что уже, если я хочу иметь общую / повторно используемую .htaccess
конфигурацию, я вынужден использовать mod_rewrite
вместо того, Redirect
чтобы я мог использовать подстановку переменных сервера. Соответствующее решение
RewriteCond % !=on RewriteRule ^ https://%% [R=permanent,L]
что уже значительно сложнее, не говоря уже о возможном взаимодействии с другими mod_rewrite
правилами, которые я, возможно, захочу установить - предпочтительно, я хотел бы свести mod_rewrite
к минимуму использование из-за его сложности.
Другой пример, для которого я вообще не нашел обходного пути, это то mod_substitute
, что он вообще не поддерживает %
расширение. Если мой сайт находится в определенной подкаталоге ( sub_dir
) на сервере, и я хочу пост-обработку всех ссылок на HTML-страницах в этом каталоге, я могу сделать
AddOutputFilterByType SUBSTITUTE text/html Substitute s~/sub_dir/[^\s]+/~/sub_dir/something_else/~
поэтому здесь я должен жестко закодировать каталог sub_dir
, который мне придется заменить для любого другого подкаталога, в котором я мог бы выполнить такую же замену (нет, у меня нет доступа к корневому URL /
). Если бы это было правило перезаписи, я мог бы просто определить переменную окружения %
следующим образом:
RewriteRule ^ - [E=site_dir:/sub_dir]
но эта переменная окружения бесполезна для меня, потому mod_substitute
что не интерпретирует их.
Итак, есть ли способ избежать жесткого кодирования и дублирования доменов и подкаталогов, подобных этому, в таких модулях, как mod_alias
или mod_substitute
, которые не имеют таких же механизмов, как mod_rewrite
? Например, каким-то образом получить доступ к переменным среды, как %
в этих модулях?
0 ответов на вопрос
Похожие вопросы
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
1
Обратный прокси Apache
-
1
Перенаправление: Как дополнительное слово попало в файл?
-
-
3
команда javac не найдена
-
9
Есть ли какой-либо инструмент командной строки, который можно использовать для редактирования переме...
-
5
Gmail перенаправляет в исходную страну даже после обновления
-
3
Ubuntu Server с рабочим окружением GNOME - настройка разрешений файла конфигурации Apatche
-
4
Разница между "a = b" и "export a = b" в bash
-
4
Как установить переменную среды для сеанса GNOME?
-
8
Как я могу дать права на запись в папку всем пользователям Linux?