Como definir parâmetros / constantes em arquivos .htaccess do Apache

1

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?

    
por Socob 06.02.2017 / 19:10

0 respostas