Eu não tenho acesso aos arquivos de configuração do servidor Apache e só posso influenciar a configuração por meio dos arquivos .htaccess
.
Infelizmente, isso limita algumas coisas que alguém pode querer fazer.
Por exemplo, a maneira mais fácil de redirecionar todas as solicitações HTTP para HTTPS seria:
<If "%{HTTPS} != 'on'">
Redirect permanent / https://www.my-domain.com/
</If>
No entanto, isso me força a codificar o nome de domínio, por isso não posso reutilizar esse arquivo .htaccess
facilmente.
No meu caso, o mesmo site pode ser acessado de vários domínios diferentes (com apenas um sistema de arquivos subjacente), então isso não é uma opção para mim.
Não consigo resolver isso redirecionando para https://%{SERVER_NAME}/
, pois a instrução Redirect
não suporta esse tipo de substituição de variável ( exceto em <Location>
ou <LocationMatch>
seções , mas é claro, estes não estão disponíveis para .htaccess
files ).
Então, se eu quiser ter uma configuração de .htaccess
geral / reutilizável, sou forçado a usar mod_rewrite
em vez de Redirect
, para que eu possa usar a substituição de variáveis do servidor.
A solução correspondente é
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=permanent,L]
que já é significativamente mais complexo, sem mencionar possíveis interações com outras regras de mod_rewrite
que eu gostaria de configurar - de preferência, eu gostaria de manter o mínimo de mod_rewrite
devido a suas complexidades.
Outro exemplo, para o qual ainda não encontrei uma solução alternativa, é mod_substitute
, que não oferece suporte à expansão %{variable}
.
Se meu site estiver em um subdiretório específico ( sub_dir
) no servidor e eu quiser pós-processar todos os links em páginas HTML nesse diretório, eu posso fazer
AddOutputFilterByType SUBSTITUTE text/html
Substitute s~/sub_dir/[^\s]+/~/sub_dir/something_else/~
então aqui, eu tenho que codificar o diretório sub_dir
, que eu teria que substituir por todos os outros subdiretórios eu poderia querer executar a mesma substituição em (não, eu não tenho acesso à URL raiz %código%).
Se isso fosse uma regra de reescrita, eu poderia apenas definir uma variável de ambiente /
da seguinte forma:
RewriteRule ^ - [E=site_dir:/sub_dir]
mas essa variável de ambiente não é útil para mim porque %{env:site_dir}
não interpreta isso.
Então, existe alguma maneira de evitar a codificação e a duplicação de domínios e subdiretórios como este em módulos como mod_substitute
ou mod_alias
, que não possuem os mesmos mecanismos de mod_substitute
?
Por exemplo, de alguma forma, obtendo acesso a variáveis de ambiente como mod_rewrite
nesses módulos?