Htaccess redireciona para https e www usando um único RewriteRule

2

Eu tenho o seguinte no meu arquivo .htaccess :

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Funciona como esperado no navegador, redirecionando todo o tráfego para https://www.example.com/ .

Mas estou usando um sistema de PDV que envia automaticamente produtos para o site e, aparentemente, esse aplicativo de desktop não gosta de mais de um RewriteRule . Ele reclama que a loja virtual não está instalada. Assim que eu removo uma das regras, fica feliz.

Então, minha pergunta é: existe alguma maneira de consolidar isso em um único RewriteRule ?

    
por Joshua Goossen 18.02.2016 / 19:03

1 resposta

0

...does not like more than one RewriteRule.

Esse requisito é incomum. Provavelmente está reclamando sobre os múltiplos redirecionamentos ao solicitar http://example.com , em vez de literalmente o número de RewriteRule diretivas?

Isso pode ser resolvido ao redirecionar para o URL canônico na primeira diretiva RewriteRule . Então, ao invés de:

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Você escreveria:

RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

Ou, para manter esse "genérico", sem incluir explicitamente o nome de domínio no RewriteRule , tente o seguinte:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

Único RewriteRule

Você pode estender o código acima para criar um único RewriteRule para a canonização HTTPS e www. Tente o seguinte:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

Para todas as solicitações que são HTTP ou , não inicie www , em seguida, redirecione para o URL canônico. A terceira diretiva RewriteCond é necessária para capturar o domínio (menos um prefixo www. opcional) do host. O %1 é uma referência anterior ao último CondPattern correspondente. %código%. Se você simplesmente codificou o nome do host canônico na (.+) substituição , você não precisaria dessa terceira condição.

    
por 16.01.2017 / 16:48