Foros del Web » Administración de Sistemas » Apache »

RewriteRule y rutas relativas

Estas en el tema de RewriteRule y rutas relativas en el foro de Apache en Foros del Web. hola, he creado estas normas en .htaccess: Código PHP: Options  + FollowSymLinks RewriteEngine on RewriteRule  ^ productos /([ A - Za - z0 - 9 -]+)/([- ...
  #1 (permalink)  
Antiguo 01/12/2008, 16:44
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 10 meses
Puntos: 1
RewriteRule y rutas relativas

hola,

he creado estas normas en .htaccess:

Código PHP:
Options +FollowSymLinks
RewriteEngine on
RewriteRule 
^productos/([A-Za-z0-9-]+)/([-A-Za-z0-9]+)/([-A-Za-z0-9]+)?$ index.php?categoria=$1&codigo=$2&producto=$[L
y funciona bien, la pagina destino me pillas las variables con GET. El único problema que tengo es que los .css, .js, imágenes, etc, que estaban utilizando rutas relativas pues ahora las busca en la ruta de la dirección amigable.

Esto se soluciona, claro está, poniendo rutas absolutas pero supongo que hay una forma de solucionarlo sin tener que cambiarlas, no?

gracias

PD He visto que se puede solucionar utilizando la etiqueta BASE en el HEAD, pero he visto varias páginas que no llevan dicha etiqueta por lo que estoy seguro de que el propio .htaccess debe tener la solución más elegante.

Alguien conoce cómo se soluciona desde el propio .htaccess?

Última edición por dblanco; 01/12/2008 a las 16:57
  #2 (permalink)  
Antiguo 01/12/2008, 17:01
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 19 años, 4 meses
Puntos: 18
Respuesta: RewriteRule y rutas relativas

Tal vez podrías probar utilizando la regla actual que tienes pero solo aplicada a los archivos que terminen en .php mediante filematch, por ejemplo:
Código:
Options +FollowSymLinks 
RewriteEngine on 
<FilesMatch "\.php$">
RewriteRule ^productos/([A-Za-z0-9-]+)/([-A-Za-z0-9]+)/([-A-Za-z0-9]+)?$ index.php?categoria=$1&codigo=$2&producto=$3 [L] 
</FilesMatch>
__________________
Usuario Reigistrado de linux #399288
  #3 (permalink)  
Antiguo 01/12/2008, 18:31
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: RewriteRule y rutas relativas

no chuta, debe ser porque mi URL no acaba en .html:

/productos/proteina/100/optimum-whey-gold-standard

no obstante, creo que esa regla se refiere a qué URLs afecta, en este caso las que acaben en .html, pero una vez afecta a un URL afectará a todo su contenido, es decir, que estaríamos en las mismas.

gracias
  #4 (permalink)  
Antiguo 01/12/2008, 18:45
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 19 años, 4 meses
Puntos: 18
Respuesta: RewriteRule y rutas relativas

Solo para apuntar, realmente no entiendo por qué te refieres a archivos .html, entiendo que no funcione (error mío al captar mal la redirección), pero la regla se aplica a los archivos que terminen con la extensión .php lo que claro en este caso no funciona porque las peticiones no se hacen a ningún archivo en particular de forma inicial, se hacen a la url amigable.
__________________
Usuario Reigistrado de linux #399288

Última edición por Acron_0248; 01/12/2008 a las 18:54
  #5 (permalink)  
Antiguo 01/12/2008, 18:49
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: RewriteRule y rutas relativas

si, pero mi archivo no acaba en .html sino en "/productos/proteina/100/optimum-whey-gold-standard"

saludos
  #6 (permalink)  
Antiguo 20/01/2009, 04:31
 
Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: RewriteRule y rutas relativas

Hola! Yo tenía el mismo problema que tú, lo solucioné creando un virtualhost en local para mi aplicación. Si te vale, te paso un enlace donde puede ver como crear un virtualhost http://diariolinux.com/2007/05/29/hosts-virtuales-en-apache-2-ubuntu/ esto vale para apache bajo linux.


Saludos!
  #7 (permalink)  
Antiguo 31/07/2009, 18:05
 
Fecha de Ingreso: julio-2009
Mensajes: 1
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: RewriteRule y rutas relativas

Si tu problema unicamente es que no se ven tus imágenes, css, js, etc; una manera muy facil de solucionarlo es utilizando rutas relativas:

/imagenes/imagen1.jpg en lugar de imagenes/imagen1.jpg

/js/javascript.js en lugar de js/javascript.js

Espero te sirva, Saludos.
  #8 (permalink)  
Antiguo 04/12/2009, 03:23
Avatar de editjj  
Fecha de Ingreso: febrero-2006
Ubicación: madrid
Mensajes: 34
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: RewriteRule y rutas relativas

Buenos dias todos,

tengo el mismo problema que dblanco, he probado lo que dices webmax, pero sigue sin cargar los estilos y javascript.

¿alguien conoce la solución sin tener que poner las rutas absolutas de estos archivos?

muchas gracias

saludos
  #9 (permalink)  
Antiguo 04/12/2009, 07:04
serser
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: RewriteRule y rutas relativas

Prueba con la directiva RewriteBase justo después de RewriteEngine On.

Por ejemplo, si tu URL base es /productos

RewriteEngine On
RewriteBase /productos
etc...
  #10 (permalink)  
Antiguo 04/12/2009, 08:20
Avatar de editjj  
Fecha de Ingreso: febrero-2006
Ubicación: madrid
Mensajes: 34
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: RewriteRule y rutas relativas

Buenas tardes Serser,

muchas gracias por tu respuesta. Ya lo intenté y no me funcionó.

al final he optado por utilizar la etiqueta <base href="" />

aunque sigo interesado en encontrar una solución desde el .htaccess

saludos
  #11 (permalink)  
Antiguo 21/02/2010, 13:51
 
Fecha de Ingreso: enero-2005
Mensajes: 2
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: RewriteRule y rutas relativas

Para solucionar el tema de las rutas hacia los archivos .css, .js e imágenes agrega esto después de "RewriteEngine On" y antes de cualquier RewriteRule

Código:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Eso hace que apache primero verifique si exite el archivo o el directorio solicitado, y si existe no sigue procesando.

Sin embargo esto no previene otro problema: las rutas relativas dentro de los .css, por ejemplo:

Código HTML:
background: url("imagenes/imagen.jpg") no-repeat;
El navegador tomará la ruta virtual creada con el .htaccess, por ejemplo si la página se cargó como

Código:
http://www.example.com/path/amigable/
Querrá buscar esa imagen en:

Código:
http://www.example.com/path/amigable/imagenes/imagen.jpg
Cuando en realidad debería ser:

Código:
http://www.example.com/imagenes/imagen.jpg
En algunos casos bastaría con agregar una / por delante de la url relativa indicándole al navegador que enlace desde el home del dominio, pero en caso que tengas tu url amigable apuntando a un directorio dentro del home no funcionará. O sea, en el CSS pones:

Código HTML:
background: url("/imagenes/imagen.jpg") no-repeat;
Y el navegador buscará en:

Código:
http://www.example.com/imagenes/imagen.jpg
Lo que es correcto, pero si tu página está en el path absoluto:

Código:
http://www.example.com/paginas/pagina.htm
Y tienes tus imágenes en:

Código:
http://www.example.com/paginas/imagenes/
El navegador querrá buscar la imagen en:

Código:
http://www.example.com/imagenes/imagen.jpg
Lo que sería erróneo.

Para solucionar esto sería necesario poner path absolutos en las URLs dentro de los CSS:

Código HTML:
background: url("http://www.example.com/paginas/imagenes/imagen.jpg") no-repeat;
Entonces el navegador buscará exactamente eso (y con el agregado al .htaccess que puse más arriba lo encontrará).

Esto puede no ser aplicable en todos los casos. En el peor de los casos el sitio no puede moverse del dominio en el que está. Hay una solución definitiva para estos problemas pero implica programar en PHP cosa que no siempre es posible.

Estos fueron mis 5 centavos de aporte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:25.