Pregunta

Estoy desarrollando un framework MVC en PHP desde cero; sobre todo para la experiencia de aprendizaje, pero esto fácilmente podría terminar en un proyecto vivo. Fui a través de este tutorial como base y no tengo expandida a partir de ahí.

Las solicitudes se hacen de esta manera:

examplesite.com/controller/action/param1/param2/ y así sucesivamente ...

Y este es mi archivo .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

Así que todas las solicitudes van a index.php y se encaminan al controlador correcto y la acción a partir de ahí. Si no se da controlador o acción, a continuación, el 'índice' por defecto se asume para ambos.

Tengo un controlador de índice con una acción índice, que se supone que es la página principal de mi sitio web. Puedo acceder a él entrando a examplesite.com (ya que se supone que la parte del índice). Tiene algunas imágenes, un enlace a una hoja de estilo, y algunos scripts. Están vinculadas con las rutas relativas a index.php. Pensé que esto estaría bien ya que toda solicitud, ve a index.php y todo el contenido es simplemente incluido en esta página usando PHP. Esto funciona si voy a examplesite.com. Voy a ver todas las imágenes y estilos, y las secuencias de comandos a ejecutar. Sin embargo, si voy a examplesite.com/index, estoy encamina a la parte correcta del sitio, pero todos los enlaces no funcionan. ¿El navegador piensa que estoy en una carpeta diferente?

Me gustaría ser capaz de utilizar rutas relativas para todos parte del contenido de mi sitio, porque de lo contrario tengo que usar rutas absolutas en todas partes para asegurarse de que todo se mostrarán. ¿Es esto posible?

¿Fue útil?

Solución

Se necesita una ruta absoluta, ya que los navegadores evalúan las rutas relativas en relación con la solicitud URI actual (a menos que utilice la etiqueta de base, véase más adelante). que cuenta sin embargo que una ruta absoluta no necesseraly significa que es necesario incluir el nombre de dominio en el mismo. Simplemente a partir de una barra inclinada es suficiente. Es la ruta absoluta en relación con el servidor, por así decirlo.

Así que:

<img src="/images/bla.gif">

en lugar de

<img src="images/bla.gif">

... funcionará bien.

Como he mentiond, otro enfoque sería utilizar la tag de base . Pero por razones que no puedo recordar en este momento, creo que se recomienda no utilizarlo. (Si alguien más quiere carillón aquí ...)

Otros consejos

OMI imágenes, JavaScript, estilos y demás contenido estático debe no ser parte del sistema de enrutamiento. Significa que cargue PHP para cada solicitud (una actuación whack), cuando Apache podría servir esos archivos muy bien.

Mi .htaccess siempre Permite a los archivos existentes omitir PHP:

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top