1

У меня нет доступа к файлам конфигурации сервера Apache, и я могу влиять на конфигурацию только через файлы .htaccess . К сожалению, это ограничивает некоторые вещи, которые можно захотеть сделать. Например, самый простой способ перенаправить все HTTP-запросы на HTTPS:

<If "%{HTTPS} != 'on'">
    Redirect permanent / https://www.my-domain.com/
</If>

Однако это вынуждает меня жестко закодировать доменное имя, поэтому я не могу легко повторно использовать этот файл .htaccess . В моем случае один и тот же сайт может быть доступен из нескольких разных доменов (только с одной базовой файловой системой), так что это вообще не вариант. Я не могу решить эту проблему путем перенаправления на https://%{SERVER_NAME}/ поскольку оператор Redirect не поддерживает такой тип подстановки переменных (за исключением разделов <Location> или <LocationMatch>, но, конечно, это не так. доступно для файлов .htaccess).

Так что уже, если я хочу иметь общую / повторно используемую конфигурацию .htaccess , я вынужден использовать mod_rewrite вместо Redirect чтобы я мог использовать подстановку серверных переменных. Соответствующее решение

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=permanent,L]

что уже значительно сложнее, не говоря уже о возможном взаимодействии с другими правилами mod_rewrite я, возможно, захочу установить - предпочтительно, я хотел бы свести к минимуму использование mod_rewrite из-за его сложности.


Другой пример, для которого я вообще не нашел обходного пути, это mod_substitute , который вообще не поддерживает расширение %{variable} . Если мой сайт находится в определенном подкаталоге (sub_dir) на сервере, и я хочу постобработать все ссылки на HTML-страницах в этом каталоге, я могу сделать

AddOutputFilterByType SUBSTITUTE text/html
Substitute s~/sub_dir/[^\s]+/~/sub_dir/something_else/~

поэтому здесь я должен жестко закодировать каталог sub_dir , который мне придется заменить для любого другого подкаталога, в котором я мог бы выполнить такую же замену (нет, у меня нет доступа к корневому URL /). Если бы это было правило перезаписи, я мог бы просто определить переменную среды %{env:site_dir} следующим образом:

RewriteRule ^ - [E=site_dir:/sub_dir]

но эта переменная окружения бесполезна для меня, потому что mod_substitute не интерпретирует их.


Итак, есть ли способ избежать жесткого кодирования и дублирования доменов и подкаталогов, подобных этому, в таких модулях, как mod_alias или mod_substitute , которые не имеют тех же механизмов, что и mod_rewrite? Например, каким-то образом получить доступ к переменным среды, таким как %{env:variable} в этих модулях?

0