apache - working - Generic htaccess redirect www a non-www
redirect www to non www htaccess (21)
Aquí están las reglas para redireccionar una URL de www a no-www:
#########################
# redirect www to no-www
#########################
RewriteCond %{HTTP_HOST} ^www/.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]
Aquí están las reglas para redireccionar una URL no-www a www:
#########################
# redirect no-www to www
#########################
RewriteCond %{HTTP_HOST} ^(?!www/.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]
Tenga en cuenta que usé la bandera NE
para evitar que Apache escape la cadena de consulta. Sin este indicador, apache cambiará la URL solicitada http://www.example.com/?foo%20bar
a http://www.example.com/?foo%2250bar
Me gustaría redirigir www.example.com
a example.com
. El siguiente código htaccess hace que esto suceda:
RewriteCond %{HTTP_HOST} ^www/.example/.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Pero, ¿hay una manera de hacer esto de manera genérica sin codificar el nombre de dominio?
Completo controlador WWW genérico, http / https
No vi una respuesta completa. Uso esto para manejar la inclusión de WWW.
- Genérico. No requiere información de dominio.
- Fuerzas WWW en dominio primario: www.domain.com
- Elimina WWW en subdominios: sub.dominio.com
- Conserva el estado HTTP / HTTPS.
- Permite cookies individuales para dominio / subdominios
Por favor, hágamelo saber cómo funciona esto o si dejé una laguna.
RewriteEngine On
RewriteBase /
# Force WWW. when no subdomain in host
RewriteCond %{HTTP_HOST} ^[^.]+/.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Remove WWW. when subdomain(s) in host
RewriteCond %{HTTP_HOST} ^www/. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www/.)(.+/.)(.+/.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]
Esto se actualiza para trabajar en Apache 2.4:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www/.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
El único cambio contra el de Michael''s es eliminar el [NC]
, que produce el error "AH00665":
La opción NoCase para el patrón no regex ''-f'' no es compatible y se ignorará
Hola, puedes usar las siguientes reglas en tu archivo htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
La única manera de hacerlo funcionar ...
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site/.ro
RewriteRule (.*) http://www.site.ro/$1 [R=301,L]
La respuesta seleccionada y muchas otras soluciones aquí eliminaron la parte de la url después de /, por lo que básicamente, siempre se redirige al dominio principal, al menos para mí. Así que estoy agregando una muestra de trabajo que respeta la ruta completa después de la barra diagonal.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [L,R=301]
No estoy seguro de por qué quieres eliminar www. Pero la versión inversa sería:
# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_HOST} ^whattimein/.com
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L]
Y la ventaja de este script es: si tienes algo como test.whattimein.com o cualquier otro (entorno para desarrollo / prueba) no redirigirá U al entorno original.
Para aquellos que necesitan poder acceder a todo el sitio SIN el prefijo ''www''.
RewriteCond %{HTTP_HOST} ^www/.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
Mare seguro que agrega esto al siguiente archivo
/site/location/.htaccess
Pero si necesitamos hacer esto para http y https separados:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Prueba esto:
RewriteCond %{HTTP_HOST} ^www/. [NC]
RewriteRule ^(.*)$ %{HTTP_HOST}$1 [C]
RewriteRule ^www/.(.*)$ http://$1 [L,R=301]
Si el host comienza con www, pegamos todo el host al inicio de la URL, luego quitamos el "www".
Puedo encontrar mucha información errónea sobre los redireccionamientos de htaccess. En primer lugar, asegúrese de que su sitio se ejecute en Unix utilizando Apache y no en un host de Windows si espera que este código funcione.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www/.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
(Sin embargo, asegúrese de que no haya espacios de línea entre cada línea de texto; he agregado un espacio adicional entre líneas para que se vea bien en esta ventana).
Este es un fragmento de código que puede usarse para dirigir la versión www de su sitio a la versión http: //. También hay otros códigos similares que pueden usarse.
Redirigir no www a www (ambos: http + https)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www/.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www/.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
Si desea hacer esto en el archivo httpd.conf, puede hacerlo sin mod_rewrite (y aparentemente es mejor para el rendimiento).
<VirtualHost *>
ServerName www.example.com
Redirect 301 / http://example.com/
</VirtualHost>
Tengo esa respuesta aquí: https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507
Si estás forzando a www. en url o forzando ssl prototcol, luego intente usar posibles variaciones en el archivo htaccess, como:
RewriteEngine On RewriteBase / ### Force WWW ### RewriteCond %{HTTP_HOST} ^example/.com RewriteRule (.*) http://www.example.com/$1 [R=301,L] ## Force SSL ### RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L] ## Block IP''s ### Order Deny,Allow Deny from 256.251.0.139 Deny from 199.127.0.259
Utilicé la regla anterior para fwd www a no www y funciona bien para la página de inicio, sin embargo, en las páginas internas se reenvían a /index.php
Encontré esta otra regla en mi archivo .htaccess que está causando esto pero no estoy seguro de qué hacer al respecto. Cualquier sugerencia seria genial:
############################################
## always send 404 on missing files in these folders
RewriteCond %{REQUEST_URI} !^/(media|skin|js)/
############################################
## never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
############################################
## rewrite everything else to index.php
RewriteRule .* index.php [L]
uso: Javascript / jQuery
// similar behavior as an HTTP redirect
window.location.replace("http://www..com");
// similar behavior as clicking on a link
window.location.href = "http://.com";
O .htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_HOST} ^www/.yoursite/.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
y el método PHP:
$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if (substr($_SERVER[''HTTP_HOST''], 0, 4) !== ''www.'') {
header(''Location: ''.$protocol.''www.''.$_SERVER [''HTTP_HOST''].''/''.$_SERVER[''REQUEST_URI'']);
exit;
}
Ajax
$.ajax({
type: "POST",
url: reqUrl,
data: reqBody,
dataType: "json",
success: function(data, textStatus) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
else {
// data.form contains the HTML for the replacement form
$("#myform").replaceWith(data.form);
}
}
});
www to non www con https
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]
Para subcarpeta
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R]
El RewriteCond captura todo en la variable HTTP_HOST después de "www". y lo guarda en% 1. La RewriteRule captura la URL (sin líder "/") y la guarda en $ 1.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Igual que el de Michael''s excepto que éste funciona: P
RewriteEngine on
# if host value starts with "www."
RewriteCond %{HTTP_HOST} ^www/.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]
Si desea eliminar www
en http
y https
, use lo siguiente:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www/.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]
Esto redirige Non ssl
a
Y SSL
a
en apache 2.4.*
puedes lograr esto usando una directiva Redirect
con if
,
<if "%{HTTP_HOST} ==''www.example.com''">
Redirect / http://example.com/
</if>