O redirecionamento permanente do Apache remove a barra do caminho

2

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.

    
por Nathan Lutterman 17.11.2013 / 07:32

2 respostas

1

Seu .htaccess para o Laravel foi desativado. Parece apenas um simples .htaccess para URLs amigáveis ao SEF / SEO que eu suponho. Então, em vez de ser isso:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Tente isso:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
    
por 17.11.2013 / 15:17
-1

L4.1 redireciona a barra à direita em .htaccess, não na classe de aplicativo de fundação, como fazia anteriormente

# Redirect Trailing Slashes…
RewriteRule ^(.*)/$ /$1 [L,R=301]

Apenas comente

    
por 15.07.2015 / 12:47