2010-02-25 13 views
6

debo estar haciendo algo muy malo porque no importa cómo intento o Google que, no puedo encontrar una respuesta :(problema de novato con mod reescribir y URLs relativas

Por lo tanto, quiero tener una URL como http://localhost/BLUEPRINT/list/857 para cargar en realidad una url perfecto estado de funcionamiento de esta manera: http://localhost/BLUEPRINT/list.php?lid=857

me puede escribir la regla de reescritura en el archivo .htaccess y puedo leer la variable tapa el problema es que todos los caminos en list.php son relativas.. CSS, imágenes, javascript, etc. Por lo tanto, cuando la URL orientada a SEO carga, todos esos elementos se miran dentro de BLUEPRINT/list/857/...

Así, por ejemplo esto: <img src="images/logo.png" /> es en realidad algo como esto al solicitar el SEO-friendly url: <img src="list/857/images/logo.png" />

Entonces, ¿qué puedo hacer?

Probablemente podría tratar de convertir todas las rutas en la (s) página (s) al pariente raíz (por ejemplo, "/BLUEPRINT/images/logo.png") en lugar de relativo. Pero hay docenas en la página e incluso si lo hago, no funcionarán en el servidor real porque allí debería haber "/ imágenes" en lugar de "/ BLUEPRINT/images". Así que no podía simplemente cargar mis archivos al servidor real.

¿Cuáles son mis opciones? ¿Cómo funcionan todos estos maravillosos guiones como wordpress, joomla, e.t.c. manejar este problema? ¿Qué demonios estoy haciendo mal? ¡Me vuelve loco!

Respuesta

3

Sus nuevas URL no tienen el mismo prefijo de ruta base. Eso significa que las rutas URL relativas se resuelven de manera diferente. La referencia images/logo.png ahora se resuelve en /BLUEPRINT/list/images/logo.png en lugar de en /BLUEPRINT/images/logo.png.

Para solucionar este problema, ya sea utilizar las rutas de URL absolutas en sus referencias como:

<img src="/BLUEPRINT/images/logo.png" /> 

O, si usted no desea agregar la ruta URL base /BLUEPRINT/ a todos sus elementos que hacen referencia, establecer la URL base con base:

<base href="/BLUEPRINT/" /> 

las rutas de URL relativos Ahora se resuelven de esta URL base en lugar de la URL actual. Pero tenga en cuenta que cambiar la URL base afecta a todas las URL relativas.

+0

¡La etiqueta base (no lo conocía) parece una buena solución para mí! Lo intentaré y te lo haré saber. Gracias. – fractalbit

+0

¡Perdón por tomar tanto tiempo para intentarlo, pero esto es EXACTAMENTE lo que yo quería! ¡Muchas gracias! – fractalbit

+0

La etiqueta 'base' tiene problemas. http://blogs.msdn.com/b/ieinternals/archive/2009/07/27/bugs-in-the-ie8-lookahead-downloader.aspx –

1

Se puede escribir una condición que permite que las peticiones a CSS, JS y otros caminos para traspasar sus e ignorar sus reglas de reescritura para list.php. Aquí hay un ejemplo.

# Turn on URL rewriting 
RewriteEngine On 

# If your URL is www.example.com/, use/
RewriteBase/

# Find CSS and JS paths 
RewriteCond $1 ^(BLUEPRINT/css|BLUEPRINT/js) 

# No rewriting 
RewriteRule ^(.*)$ - [PT,L] 

Aquí es un gran tutorial de Apache con un montón de ejemplos: http://httpd.apache.org/docs/2.2/misc/rewriteguide.html

buena suerte!

EDIT: Otro buen enlace de Apache es el mod_rewrite docs. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html Haz una búsqueda de texto para 'passthrough'.

Otra parte de RewriteRule a tener en cuenta es el guión '-'. Significa que "no se debe realizar ninguna sustitución".

Finalmente, he agregado las reglas RewriteEngine y RewriteBase al ejemplo. Esto debería hacerlo más completo.

Cuestiones relacionadas