Por que os redirecionamentos .htaccess funcionam em http, mas não em https?


10

Eu tenho um arquivo .htaccess simples que funciona muito bem na versão http do site, mas não quando vou para https. Por quê?

RewriteEngine on
#This is so if the file exists then use the file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %{REQUEST_FILENAME} [L]

#These conditions check if a file or folder exists just for reference
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#if someone adds ".php" to the slug get rid of it
RewriteRule ^(.*)\.php$ $1  

#don't add the [R] here because we don't want it to redirect
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]

Respostas:


20

Não há informações 100% suficientes para continuar, mas na configuração padrão do SSL habitual (Red Hat / CentOS / Fedora, por exemplo), o VirtualHost para SSL é configurado em seu próprio contêiner. O uso de mod_rewrite requer no mínimo "AllowOverride FileInfo" para ser definido na raiz do documento para que ele atue.

Verifique sua configuração quanto ao SSL (/etc/httpd/conf.d/ssl.conf por padrão), verifique se ele se parece com:

DocumentRoot /var/www/html
<Directory /var/www/html>
  AllowOverride FileInfo
</Directory>

O padrão para AllowOverride é 'None'; portanto, qualquer outra configuração (como 'All') que adicione recursos FileInfo é OK.

http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride


1
Não consigo ver o /etc/httpd/conf.d/ssl.conf no meu linux, como encontrá-lo?
Ashok KS

1
(1) Pode ser necessário procurar o arquivo conf. Por exemplo, em alguns sistemas, é /etc/apache2/sites-enabled/default-ssl.conf(2) Para ser super claro, se você ainda está tendo problemas, tente em AllowOverride Allvez de AllowOverride FileInfo. Depois de fazê-lo funcionar, você pode ler os AllowOveridedocumentos do Apache em detalhes para limitar o acesso mais especificamente para maximizar a segurança. (3) Lembre-se de que você deve reiniciar o apache para que as configurações tenham efeito.
SilentSteel

4

Seria possível que o mod_rewrite não esteja ativado para o servidor HTTPS ou que o .htaccess não esteja sendo usado?

Verifique as AllowOveridepermissões em uso no site regular e compare com a versão SSL, provavelmente uma discrepância. Provavelmente introduzido para melhorar a segurança, se não um acidente.

mod_rewrite é quase essencial, portanto, qualquer provedor de hospedagem decente deve ajudar a resolver isso.


1

"trabalhando no apache2 + ubuntu preciso"

Ocorreu um problema semelhante quando eu estava usando o Slim framework e tentando remover o index.php necessário no URL. O reWrite funcionou perfeitamente para http, mas para https: estava mostrando o URL não encontrado, o que significava que o reWrite não estava funcionando.

Após alguns testes, encontrei esta solução:

 cd /etc/apache2/sites-enabled
 sudo vim default-ssl

Altere AllowOverride None para All . Da mesma forma sudo vim ssl


0

Eu tive problema semelhante, é isso que funcionou para mim.

No seu httpd.conf, verifique se você tem os dois:

ServerName domain.com

ServerAlias ​​www.domain.com

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.