Как определить параметры / константы в файлах Apache .htaccess

669
Socob

У меня нет доступа к файлам конфигурации сервера 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? Например, каким-то образом получить доступ к переменным среды, как %в этих модулях?

1

0 ответов на вопрос

Похожие вопросы