.htaccess - redireccionar - rewritecond htaccess
.htaccess reescribir para redireccionar la URL raĆz al subdirectorio (19)
Anteriormente utilizo el siguiente código que funciona correctamente para redireccionar la URL raíz de cada uno de mis dominios / subdominios a sus subdirectorios de correspondencia, que se nombran exactamente como el subdominio en sí mismo como se indica a continuación:
RewriteCond %{HTTP_HOST} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
RewriteCond %{HTTP_HOST} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
RewriteCond %{HTTP_HOST} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
RewriteCond %{HTTP_HOST} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
Sin embargo, cuando quiero agregar otros subs o dominios, será necesario agregarlos en el código anterior. Debería ser mucho más conveniente simplificarlo para que funcione como comodín (*) como se muestra a continuación:
RewriteCond %{HTTP_HOST} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
Por lo tanto, cada vez que se agreguen otros subdominios / dominios siempre que el nombre del subdominio tenga un prefijo de sub (como: sub3.domain1.com, sub1.domain3.com etc.) el código seguirá siendo válido.
Tratando de conseguir
www.example.com
ir directamente a
www.example.com/store
He intentado múltiples bits de código y ninguno funciona.
Lo que he intentado:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(.+)/www.example/.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]
¿Qué estoy haciendo mal?
Creo que los principales problemas con el código que publicaste son:
la primera línea coincide en un host que comienza con estrictamente sample.com, por lo que www.sample.com no coincide.
la segunda línea quiere al menos un carácter, seguido de www.sample.com que tampoco coincide (¿por qué escapaste de la primera w?)
ninguna de las reglas incluidas redirige a la url que especificó en su objetivo (además, la muestra está mal escrita como ejemplo, pero eso es irrelevante).
Para referencia, aquí está el código que tiene actualmente:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sample.com$
RewriteRule (.*) http://www.sample.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(.+)/www.sample/.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]
Esta parecía la solución más simple:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
Estaba obteniendo bucles de redireccionamiento con algunas de las otras soluciones.
Esto es lo que solía redirigir a un subdirectorio. Esto lo hizo de manera invisible y aún así lo permite a través de solicitudes que coinciden con un archivo existente o lo que sea.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]
Cambie el sitio web y subdígalo con sus valores.
Esto intentará con el subdirectorio si el archivo no existe en la raíz. Necesitaba esto mientras movía un sitio web .html básico que esperaba ejecutarse en el nivel raíz y lo empujó a un subdirectorio. Solo funciona si todos los archivos son planos (no es posible realizar trucos .htaccess en el subdirectorio). Útil para cosas enlazadas como archivos css y js.
# Internal Redirect to subdir if file is found there.
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
RewriteRule ^(.*)$ /subdir/$1 [L]
Hay dos maneras de salir de las posibles soluciones para lograr esto: 1. Cree un archivo .htaccess
en la carpeta raíz que se encuentra debajo (simplemente reemplace example.com y my_dir con sus valores correspondientes):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_dir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_dir/index.php [L]
</IfModule>
Use RedirectMatch para redirigir solo la URL raíz "/" a otra carpeta o URL,
RedirectMatch ^ / $ http://www.example.com/my_dir
He encontrado que para evitar la redirección circular, es importante limitar el alcance de la redirección al directorio raíz. Habría utilizado
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
La mayoría de las soluciones anteriores son correctas, pero todas faltan la transparencia de la redirección.
En mi caso, al visitar www.example.com quería redirigirme al subdirectorio / tienda pero sin actualizar la URL a www.example.com/store . (todo lo que quiero es obtener el código de página de ese directorio). Si ese es tu caso, la solución a continuación funciona perfectamente.
RewriteEngine on
RewriteCond %{HTTP_HOST} example/.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/$1 [L]
fuente: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory
Me sorprendió que nadie mencionara esto:
RedirectMatch ^/$ /store/
Básicamente, redirige la raíz y solo la URL raíz. La respuesta se originó en este enlace.
No entiendo tu pregunta ...
Si desea redirigir cada solicitud a una subcarpeta:
RewriteRule ^(.*)$ shop/$1 [L,QSA]
http://www.example.com/* -> wwwroot/store/*
Si desea redirigir a una subcarpeta que tiene el nombre de dominio
RewriteCond %{HTTP_HOST} ([^/.]+/.[^/.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]
http://www.example.com/* -> wwwroot/example.com/*
Otra alternativa si desea volver a escribir la URL y ocultar la URL original:
RewriteEngine on
RewriteRule ^(.*)$ /store/$1 [L]
Con esto, si por ejemplo escribe http://www.example.com/product.php?id=4
, se abrirá el archivo de forma transparente en http://www.example.com/store/product.php?id=4
pero sin mostrar al usuario la url completa.
Para establecer una redirección invisible desde la raíz a la subcarpeta, puede usar la siguiente RewriteRule en /root/.htaccess:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]
La regla anterior redirigirá internamente el navegador desde:
a
Y
a
mientras que el navegador permanecerá en la carpeta raíz.
Prueba esto:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example/.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^$ store [L]
Si desea un redireccionamiento externo (que hace que el navegador que lo muestra muestre la URL redirigida), establezca la marca R
allí también:
RewriteRule ^$ /store [L,R=301]
Puede usar una regla de reescritura que usa ^ $ para representar la raíz y reescribirla en su directorio / store, así:
RewriteEngine On
RewriteRule ^$ /store [L]
Responderé a la pregunta original no señalando otra posible sintaxis (hay muchas entre las otras respuestas), sino señalando algo con lo que una vez tuve que lidiar, que me tomó un tiempo entenderlo:
What am I doing wrong?
Existe la posibilidad de que% {HTTP_HOST} no se llene correctamente, o no se complete. Aunque, solo he visto que esto ocurre en una sola máquina en un host compartido, con algunos apache parcheados personalizados 2.2, no obstante, es una posibilidad.
Trate de usar las siguientes líneas en htaccess
Nota: es posible que deba verificar cuál es el nombre del default.html
default.html es el archivo que se carga de forma predeterminada en la carpeta raíz.
RewriteEngine
Redirect /default.html http://example.com/store/
Un poco de google, me da estos resultados:
RewriteEngine On
RewriteBase /
RewriteRule ^ index. (. *)? $ http://domain.com/subfolder/ [r = 301]Esto redirigirá cualquier intento de acceder a un archivo llamado index.something a su subcarpeta, ya sea que el archivo exista o no.
O prueba esto:
RewriteCond% {HTTP_HOST}! ^ Www.sample.com $ [NC]
RewriteRule ^ (. *) $% {HTTP_HOST} / samlse / $ 1 [R = 301, L]
No he hecho mucha redirección en el archivo .htaccess, así que no estoy seguro de si esto funcionará.
simplemente agrega este código a su archivo .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index/.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
</IfModule>