.htaccess

Redirigir no www a www en.htaccess



(13)

Tengo esto en mi archivo .htaccess:

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

pero cada vez que accedo a un archivo en mi raíz como http://example.com/robots.txt , se redirigirá a http://www.example.comrobots.txt/ .

¿Cómo puedo corregir esto para que se redirija correctamente a http://www.example.com/robots.txt ?



Cambie su configuración a esto (agregue una barra inclinada):

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

O la solución que se describe a continuación (propuesta por @absiddiqueLive ) funcionará para cualquier dominio:

RewriteEngine On RewriteCond %{HTTP_HOST} !^www/. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Si necesita admitir http y https y conservar la opción de protocolo, intente lo siguiente:

RewriteRule ^login/$ https://www.%{HTTP_HOST}/login [R=301,L]

Donde reemplaza el login con checkout.php o cualquier URL que necesite para admitir HTTPS.

Sin embargo, yo diría que esta es una mala idea. Para el razonamiento , lea esta respuesta .


Creo que la respuesta principal redirige con éxito no www a www (por ejemplo: mysite.com -> www.misitio.com ), pero no tiene en cuenta los subdominios comodín, lo que da como resultado:

random.mysite.com -> www.random.mysite.com

Aquí hay una solución con / sin HTTPS

HTTP

RewriteEngine On RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC] RewriteRule ^(.*)$ http%{ENV:protossl}://www.mysite.com/$1 [L,R=301]

HTTP / HTTPS

RewriteEngine On RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ - [env=protocol:https] RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ - [env=protocol:http] RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC] RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/$1 [L,R=301]

* Nota: No he probado https porque actualmente no tengo un certificado para probar, pero si alguien puede verificar u optimizar lo que tengo, sería increíble.



Escribir en .htaccess :)

## Redirect from non-www to www (remove the two lines below to enable) RewriteCond %{HTTP_HOST} !^www/. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]


Esta configuración funcionó para mí en bitnami wordpress con SSL configurado:

Se agregó lo siguiente debajo de "RewriteEngine On" en el archivo /opt/bitnami/apps/wordpress/conf/httpd-app.conf

RewriteCond %{HTTP_HOST} . RewriteCond %{HTTP_HOST} !^www/. [NC] RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteBase / RewriteCond %{HTTPS} !on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Esta es la solución correcta que admite https y http:

# Redirect to www RewriteCond %{HTTP_HOST} ^[^.]+/.[^.]+$ RewriteCond %{HTTPS}s ^on(s)| RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


He probado todas las soluciones anteriores pero no funcionaba para mí, he intentado eliminar el http: // y no redirigiré, también eliminé el www y lo redirigí bien, así que me confundí, especialmente estoy ejecutando todos mis sitios en https : //

Así que he combinado algunos códigos y encontré la solución perfecta tanto para http: // como para https: // y www y no www.

# HTTPS forced <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] # Redirect to www RewriteCond %{HTTP_HOST} !^www/. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] </IfModule>

Espero que esto pueda ayudar a alguién :)


Prueba esto, lo usé en muchos sitios web, funciona perfectamente

Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$ RewriteRule ^(.*) http://www.bewebdeveloper.com/$1 [QSA,L,R=301]


Si es posible, agregue esto al archivo de configuración principal de Apache. Es una solución más liviana, requiere menos procesamiento.

<VirtualHost 64.65.66.67> ServerName example.com Redirect permanent / http://www.example.com/ </VirtualHost> <VirtualHost 64.65.66.67> ServerAdmin [email protected] ServerName www.example.com DocumentRoot /var/www/example . . . etc

Por lo tanto, el VirtualHost por separado para "example.com" captura esas solicitudes y luego las redirige permanentemente a su VirtualHost principal. Por lo tanto, no existe un análisis REGEX con cada solicitud, y los navegadores de sus clientes almacenarán en caché el redireccionamiento para que nunca (o rara vez) soliciten nuevamente la URL "incorrecta", lo que le ahorrará la carga del servidor.

Tenga en cuenta la barra inclinada posterior en Redirect permanent / http://www.example.com/ . Sin él, una redirección desde example.com/asdf redirigiría a http://www.example.comasdf lugar de a http://www.example.com/asdf .


Sólo un consejo
Piense cuidadosamente si realmente necesita el redireccionamiento permanente indicado como [R=301] porque si decide cambiarlo más tarde, los visitantes anteriores de la página no obtienen la nueva configuración.

La información de redirección permanente se almacena con frecuencia en el caché del navegador y, en general, es difícil de eliminar (volver a cargar la página no resuelve el problema). Los visitantes de su sitio web quedarán bloqueados en la redirección anterior "para siempre".

Resumen,
Recomendaría usar una redirección temporal [R=302] porque nunca se almacena en caché.


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

Esto redirigirá tu dominio que no se inició con WWW. No redirecciona tu subdominio.

Es útil.


RewriteEngine On RewriteCond %{HTTP_HOST} !^www/. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Para Https

RewriteCond %{HTTPS}s ^on(s)| RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]