Redirecionar solicitações de ativos para https, juntamente com mod_rewrite para URLs bonitas

2

Estou com problemas para alterar todas as solicitações para https, usando os seguintes itens para URLs bonitos:

RewriteEngine On
RewriteBase /
RewriteRule ^/?([-_a-zA-Z0-9]+)$ /?p=$1
RewriteRule ^/?([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /?par=$1&p=$2 [L]

Eu tentei adicionar o seguinte diretamente abaixo do acima (e remover a diretiva L acima), mas recebo erros de redirecionamento:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

O que estou fazendo de errado aqui?

    
por Jeff 27.09.2017 / 19:28

1 resposta

1
RewriteCond %{HTTP:X-Forwarded-Proto} !https

O cabeçalho X-Forwarded-Proto é definido apenas por um servidor proxy (ou um cliente mal-intencionado), portanto, a menos que você esteja atrás de um proxy SSL, você não deve usá-lo (provavelmente resultará em um loop de redirecionamento se você fizer isso.

Qualquer redirecionamento canônico (HTTP para HTTPS e / ou não-www para www) deve aparecer antes das suas reescritas internas.

Tente algo como o seguinte:

RewriteEngine On
RewriteBase /

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

RewriteRule ^/?([-\w]+)$ /?p=$1 [L]
RewriteRule ^/?([-\w]+)/([-\w]+)$ /?par=$1&p=$2 [L]

Adicionei o sinal L à sua primeira reescrita interna.

O \w é apenas uma classe de caracteres curtos para [_a-zA-Z0-9] .

(Se estiver em .htaccess , o prefixo /? no padrão RewriteRule não será necessário.)

Altere o redirecionamento 302 (temporário) para 301 (permanente) somente quando tiver certeza de que está funcionando OK, para evitar problemas de armazenamento em cache durante o teste. Você precisará verificar se o cache do navegador está limpo antes do teste.

Idealmente, você também deve canonizar o www / non-www aqui, em vez de confiar em uma meta tag canônica. Isso pode ser combinado com o redirecionamento HTTP para HTTPS acima. Por exemplo, para redirecionar para www:

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

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

No entanto, este redirecionamento específico supõe que você não tenha outros subdomínios.

    
por 27.09.2017 / 19:54