Estou usando o Apache 2.4 e configuro dois diretórios virtuais. Um requer SSL e o outro redireciona para ele.
Se um usuário tentar visitar https://www.derp.com/derp
sem / derp existente, ele receberá um 404 corretamente. Mas quando um usuário visitar http://www.derp.com/derp
, o Apache redireciona o usuário incorretamente para https://www.derp.comderp
, removendo a barra entre o caminho e o caminho nome de domínio.
Não tenho ideia do que estaria causando isso.
O seguinte é a configuração do meu host virtual.
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName www.derp.com
ServerAlias derp.com
DocumentRoot "C:\Users\derp\Documents\Web Projects\derp"
SSLEngine on
SSLCertificateFile "C:\Apache24\certs\cert.cer"
SSLCertificateKeyFile "C:\Apache24\certs\key.key"
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.derp.com
ServerAlias derp.com
Redirect permanent / https://www.derp.com/
</VirtualHost>
<Directory "C:\Users\derp\Documents\Web Projects\derp">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
SSLRequireSSL
</Directory>
Por que o Apache estaria se comportando dessa maneira?
Pergunta de bônus: os redirecionamentos devem ser tratados na minha definição de host virtual ou devem ser tratados no arquivo .htaccess no diretório físico do site?
Editar:
Estou iniciando um projeto do Laravel e, por padrão, a pasta pública contém um arquivo .htaccess, eis o seguinte:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Editar dois:
Eu tentei:
- adicionando uma barra no final do caminho do DirectoryRoot
- substituindo as barras invertidas por barras no caminho DirectoryRoot
- substituindo as barras invertidas por barras duplas invertidas no caminho DirectoryRoot
Eu também removi completamente o arquivo .htaccess do diretório.
Ele redireciona corretamente quando você passa de http://www.derp.com
para https://www.derp.com
. É apenas quando você especifica um caminho e tenta https que remove a barra entre o domínio e o caminho.
Editar três:
Eu também tentei a seguinte sugestão:
Redirect permanent / https://www.derp.com/
Try
RedirectMatch permanent /(.*) https://www.derp.com/$1
or
RedirectMatch permanent (.*) https://www.derp.com/$1
... e, em vez de redirecionar para o link , ele não redireciona, tenta e fornece 404 para link , mas usando o Apache 404, em vez de lançar uma exceção Not Found, como o Laravel faz sem configuração.