rewriterule rewritecond redireccionar otra htaccess enmascarar ejemplo descargar carpeta cambiar .htaccess mod-rewrite redirect

.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>

  1. 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.



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>