Estoy desarrollando un sitio web PHP que utiliza el enrutamiento url. Me gustaría que el sitio sea independiente del directorio, de modo que se pueda mover de http://site.example.com/ a http://example.com/site/ sin tener que cambiar todas las rutas en el HTML. El problema surge cuando estoy vinculando archivos que no están sujetos a enrutamiento, como archivos CSS, imágenes, etc. Por ejemplo, supongamos que la vista para la acción index
del controlador welcome
contiene la imagen img/banner.jpg
. Si la página se solicita con la url http://site.example.com/welcome, el navegador solicitará la imagen como http://site.example.com/img/banner.jpg, lo cual está perfectamente bien. Pero si la página se solicita con la url http://site.example.com/welcome/index, el navegador pensará que welcome
es un directorio e intentará buscar la imagen como http://site.example.com/welcome/img/banner.jpg, lo cual es obviamente incorrecto.Cómo mantener un sitio web con el directorio de enrutamiento url independiente
yo ya he considerado algunas opciones, pero todos parecen imperfecta a mí:
Uso reescritura de URL para redirigir las solicitudes a partir de (* .css | * .js | ...) o (css/* | js/* | ...) en la ruta correcta.
Problemas: Cada extensión debería nombrarse en las reglas de reescritura. Si alguien agregara un nuevo tipo de archivo (por ejemplo, un archivo mp3), no sería reescrito.
Anteponga la ruta base a cada ruta relativa con una función php. Por ejemplo:
<img src="<?php echo url::base(); ?>img/banner.jpg" />
Problemas: Se ve desordenado; css - y js - los archivos que contienen rutas deberían procesarse por PHP.
Entonces, ¿cómo mantener un directorio de sitios web independiente? ¿Hay una manera mejor/más limpia que las que se me ocurrió?
De acuerdo con la especificación CSS, las URL en los archivos CSS se resuelven en relación con la ruta del archivo en el que están definidas. Por lo tanto, la etiqueta base no les afecta en absoluto. Lo intenté, y realmente funciona de esa manera. – mooware