¿Cómo puedo redirigir todas las solicitudes a https y no www en un solo salto?
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
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]
: siHOST_NAME
comienza conwww.
[NC,OR]
: Ignora la coincidencia de mayúsculas y minúsculas yOR
la siguiente condiciónRewriteCond %{HTTPS} !on
:HTTPS
no está encendidoRewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
: Esta condición siempre coincidirá ya que aquíwww.
es una coincidencia opcional. Se usa para capturar la subcadena deHTTP_HOST
sin comenzarwww.
usando el(.+)
patrón en el grupo de captura # 1 (para ser referenciado hacia atrás como%1
má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á ahttps://%1%{REQUEST_URI}
conR=301
código. De dónde%1
es la referencia inversa del grupo de captura n. ° 1RewriteCond
, como se mencionó anteriormente.