¿Cómo puedo redirigir todas las solicitudes a https y no www en un solo salto?

Dec 18 2019

Quiero redirigir todas las solicitudes a https y no www en un salto para la página principal / de inicio y otras subpáginas. Estoy usando el siguiente htaccess. fuente

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^mytesting\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.mytesting\.com$
RewriteRule .* https://www.mytesting.com%{REQUEST_URI} [R=301,L]

Pero obtuve la siguiente redirección

Quiero como este:

http://mytesting.com          > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://mytesting.com/faq      > https://mytesting.com/faq
https://mytesting.com         > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://www.mytesting.com/faq  > https://mytesting.com/faq
https://mytesting.com/faq     > https://mytesting.com/faq

Respuestas

2 anubhava Dec 18 2019 at 21:41

Puede usar esta regla para ambos redireccionamientos en una regla:

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

Aquí está la explicación de esta regla:

  • RewriteCond %{HTTP_HOST} ^www\. [NC,OR]: si HOST_NAMEcomienza conwww.
  • [NC,OR]: Ignora la coincidencia de mayúsculas y minúsculas y ORla siguiente condición
  • RewriteCond %{HTTPS} !on: HTTPSno está encendido
  • RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]: Esta condición siempre coincidirá ya que aquí www.es una coincidencia opcional. Se usa para capturar la subcadena de HTTP_HOSTsin comenzar www.usando el (.+)patrón en el grupo de captura # 1 (para ser referenciado hacia atrás como %1más adelante). Tenga en cuenta que (?:..)es un grupo que no captura.
  • RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]: ^siempre coincidirá. Esta regla redirigirá a https://%1%{REQUEST_URI}con R=301código. De dónde %1es la referencia inversa del grupo de captura n. ° 1 RewriteCond, como se mencionó anteriormente.