Redirigir todas las páginas a no www y una página a www

Redirigir todas las páginas a no www y una página a www

Quiero redirigir todas mis páginas internas (por ejemplo: example.com/about) a su versión sin www pero quiero que mi página de inicio ( https://example.com) redirija a su versión www ( https://www.example.com).

Busqué muchos artículos en Internet pero no funcionó.

Si se establecen ambas reglas, las páginas internas se redirigen bien, pero la página de inicio queda atrapada en un bucle.

No sé cómo codificar, así que le pido que escriba el código que debo pegar en mi .htaccessarchivo.

Actualmente, he configurado todas las páginas para redirigir a sus versiones sin www (incluso a la página de inicio) con el siguiente código:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>
# BEGIN Sitepad
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END Sitepad

Respuesta1

Busqué muchos artículos en Internet pero no funcionó.

Probablemente porque se trata de un requisito extraño. Me sorprendería que pudieras encontrar algún código que pudieras simplemente copiar/pegar y que haga esto.

Sin embargo, suponiendo que esté construyendo la URL absoluta correcta para todos sus enlaces internos (ya que no debe vincular internamente a una URL que redireccione), entonces esto es relativamente trivial de implementar .htaccesssi comprende sus directivas existentes.

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

La expresión regular .*en elRewriteRule patrónpartidostodo. Específicamente, coincide con 0 o más de cualquier carácter, como lo indica el *cuantificador. Coincide con la ruta URL vacía (es decir, la "página de inicio") y con cada ruta URL que no esté vacía (es decir, todo lo demás).

Debe modificar la expresión regular anterior para que coincida con una ruta URL que no esté vacía (es decir, todo excepto la página de inicio). Y cree otra regla (en la otra dirección) que coincida únicamente con una ruta URL vacía.

(Esto utiliza el hecho de que mod_dir atiende index.phpsolicitudes a la página de inicio, no las directivas mod_rewrite que siguen).

Para hacer coincidir 1 o más (es decir, ruta URL no vacía), puede utilizar el +cuantificador (más), en lugar de *(estrella/asterisco).

Por ejemplo:

# Redirect everything except the homepage (from www to non-www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.+)$ https://example.com/$1 [L,R=301]

# Redirect the homepage only (from non-www to www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]

Deberá borrar la memoria caché de su navegador antes de realizar la prueba, ya que el navegador habrá almacenado en caché la redirección 301 (permanente) anterior que redirigía la página de inicio de www a no www.

Pruebe primero con redirecciones 302 (temporales) para evitar posibles problemas de almacenamiento en caché.

información relacionada