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.