es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Evite el encadenamiento de redireccionamientos para https sin www en el archivo .htaccess.

Después de una búsqueda interminable en Google y varios foros, no puedo encontrar un método para redireccionar un sitio correctamente sin ninguna cadena. ¿Es posible redirigir a una única URL y evitar las cadenas? A continuación se muestra el código que estoy usando en este momento:

RewriteCond %{HTTP<em>USER</em>AGENT} libwww-perl.*
RewriteRule .* – [F,L]

RewriteCond %{REQUEST<em>FILENAME} !-f
RewriteRule [^/]$ %{REQUEST</em>URI}/ [L,R=301,NE]

RewriteCond %{HTTP<em>HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP</em>HOST}/$1 [R=301,L]

En este momento parece generar 2 o 3 redirecciones. Por ejemplo, `http://example.co.uk/example-page/` se redirige a:

  • `http://www.example.co.uk/example-page/`
  • `https://www.example.co.uk/example-page/`

O si no incluye una barra diagonal final `http://example.co.uk/example-page`, se va a:

  • `http://example.co.uk/example-page/`
  • `http://www.example.co.uk/example-page/`
  • `https://www.example.co.uk/example-page/`

¿Es posible simplemente ir directamente a `https://www.example.co.uk/example-page/` sin importar si incluimos o no una barra diagonal final, si incluimos o no www o http? ¿Cuál es la mejor forma de escribir esto?

Mi conocimiento de archivos .htaccess es muy limitado, pero tengo muchas ganas de aprender cómo funciona todo esto y cómo se puede lograr.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible redirigir a una única URL sin cadenas. Aquí está el código modificado que lo logra:

    RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
    RewriteRule .* – [F,L]
    
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(.*)$  [NC]
    RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301,NE]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\.(jpg|jpeg|png|gif|css|js)$
    RewriteRule (.*)$ /$1/ [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (.*)$ index.php?route=$1 [L]
    

    Este código utiliza tres RewriteCond para determinar si la solicitud es HTTP, si la URL no incluye www. y capturar el nombre de dominio. La siguiente RewriteRule luego redirige a `https://www.%1/$1` que combina el nombre de dominio capturado y la ruta actual.

    Además, elimina barras diagonales finales y las agrega si faltan. Además, excluye las solicitudes de archivos con ciertas extensiones para que no se redireccionen.

    Este código debería redirigir a `https://www.example.co.uk/example-page/` sin importar si la URL contiene una barra diagonal, incluye www. o es HTTP.

Comments are closed.