Нормальные люди создают внутри приложения .htaccess файл, и вписывают туда строку `AddDefaultCharset UTF-8". (зачем мне web-приложение написано в предыдущей теме)
Но здесь есть три проблемы:
- с какого хрена вообще Apache использует ISO-8859-1, если в системе Gentoo по-умолчанию в файловой системе используется utf-8 ?
# eselect locale list
Available targets for the LANG variable:
[1] C
[2] C.utf8
[3] en_US.utf8
[4] POSIX
[5] ru_RU.utf8 *
[ ] (free form)
Проклятый RFC 2616 дотянулся…
- файлы .htaccess не всегда работают, а только тогда, когда их обработка сконфигурирована админом сервера Apache при помощи директивы
AllowOverride
- эти файлы надо будет включать много раз в каждое приложение, это нарушает принцип DRY.
У меня была идея сделать отдельный .ebuild, который будет устанавливать файл /etc/apache2/modules.d/00_default_encoding.conf
со строчкой AddDefaultCharset UTF-8
внутри, и добавлять этот ebuild в зависимости каждого web-приложения. Но у такого решения по-прежнему сохраняются недостатки 1 и 3.
В общем, надо как-то переделать .ebuild-файл для Apache, или добавить к нему Reverse Dependency, правильно? Или там уже всё есть, я просто использовать не умею?
Настроек нужных в USE-флагах я не вижу:
[ebuild R ] www-servers/apache-2.4.57:2::gentoo USE="gdbm (split-usr) ssl suexec-caps systemd -debug -doc -ldap (-selinux) -static -suexec -suexec-syslog -threads" APACHE2_MODULES="actions alias auth_basic auth_digest authn_anon authn_core authn_dbm authn_file authz_core authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir env expires ext_filter file_cache filter headers include info log_config logio mime mime_magic negotiation rewrite setenvif socache_shmcb speling status unique_id unixd userdir usertrack vhost_alias -access_compat -asis -auth_form -authn_dbd -authn_socache -authz_dbd -brotli -cache_disk -cache_socache -cern_meta -charset_lite -dbd -dumpio -http2 -ident -imagemap -lbmethod_bybusyness -lbmethod_byrequests -lbmethod_bytraffic -lbmethod_heartbeat -log_forensic (-lua) -macro -md -proxy -proxy_ajp -proxy_balancer -proxy_connect -proxy_fcgi -proxy_ftp -proxy_hcheck -proxy_html -proxy_http -proxy_http2 -proxy_scgi -proxy_uwsgi -proxy_wstunnel -ratelimit -remoteip -reqtimeout -session -session_cookie -session_crypto -session_dbd -slotmem_shm -socache_memcache -substitute (-tls) -version -watchdog -xml2enc" APACHE2_MPMS="prefork -event -worker" LUA_SINGLE_TARGET="lua5-1 -lua5-3 -lua5-4" 7 308 KiB
Можно, конечно, сделать свой особый билд для Apache и в нём добавить патч, или использовать фичу user patches но что-то мне такое решение не кажется правильным, и включабельным в профиль для распространение на множество машин.
Я бы сказал, что «кодировка» - это такая фича, прикрученная сбоку. И эту фичу билды должны иметь возможность требовать через зависимости. Чтобы пакетный менеджер мог такие зависимости вычислить и установить ту кодировку, которую требуют сайты.
А если кодировок требуется несколько, то устанавливать несколько пакетов с кодировками, но конфигурировать их уже не глобально для инстанса Apache, а на приложения, которые её используют.
Пакетных менеджеров, вообще говоря, много. Поэтому логику выбора что и как конфигурировать можно было бы засунуть в отдельную утилиту, и написать к ней .eclass. А в билдах вызывать какую-нибудь функцию, чтобы она символизировала. Такая утилита есть, это webapp-config. Вы в ней установку кодировки видите? И я - нет.