Cómo mantener un sitio web con dirección url de enrutamiento directorio independiente

StackOverflow https://stackoverflow.com/questions/276443

  •  07-07-2019
  •  | 
  •  

Pregunta

Estoy desarrollando un sitio web de PHP que utiliza la dirección url de enrutamiento.Me gustaría que el sitio de directorio independiente, de modo que pudiera ser trasladado de http://site.example.com/ a http://example.com/site/ sin tener que cambiar de cada ruta en el HTML.El problema viene cuando estoy con enlaces a archivos que no son objeto de enrutamiento, como archivos css, imágenes y así sucesivamente.

Por ejemplo, supongamos que el punto de vista de la acción index de la controladora welcome contiene la imagen img/banner.jpg.Si se solicita la página con la url http://site.example.com/welcome, el navegador va a solicitar a la imagen como http://site.example.com/img/banner.jpg, que está perfectamente bien.Pero si se solicita la página con la url http://site.example.com/welcome/index, el navegador se piensa que welcome es un directorio y tratará de capturar la imagen como http://site.example.com/welcome/img/banner.jpg, que es obviamente erróneo.

Ya he considerado algunas opciones, pero todos ellos parecen imperfecto para mí:

  • Usar la reescritura de url para redirigir las solicitudes de (*.css|*.js|...) o (css/*|js/*|...) a la derecha de la ruta.

    Problemas:Cada extensión tiene que ser nombrado en las reglas de reescritura.Si alguien agregue un nuevo tipo de archivo (por ejemplo,un archivo mp3), no sería reescrito.

  • Anteponer la base de la ruta de acceso a cada ruta de acceso 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 las rutas tendrían que ser procesados por PHP.

Así que, ¿cómo mantener un directorio de sitios web independientes?Hay un mejor y más limpia que la que se me ocurrió?

¿Fue útil?

Solución

Usted puede poner en la cabeza

<base href="<?php echo url::base(); ?>" /> 

Esto significa que el navegador va a solicitud de cualquier no-direcciones Url absolutas en relación a la ruta. Sin embargo no estoy seguro de cómo esto podría afectar la Url incrustada en los archivos CSS, etc. Esto no afecta a las rutas definidas en los archivos CSS.(gracias mooware)

Otros consejos

El <base> la cosa funciona, pero es necesario recordar que va a afectar a su <a> también etiquetas.Considere este ejemplo.:

<!-- this page is http://oursite.com/index.html -->
<html>
 <head>
    <base href="http://static.oursite.com/" />
 </head>
 <body>
    <img src="logo.gif" alt="this is http://static.oursite.com/logo.gif" />
    <a href="/login">this links to http://static.oursite.com/login which is not what we wanted.  we wanted http://oursite.com/login</a>
 </body>
</html>

Si utiliza una función de PHP llamada para la creación de sus enlaces, eso no será un problema, ya que puede sólo asegúrese de que se escupe URL absoluta.Pero si usted (o sus diseñadores) mano-código de la <a> etiquetas, a continuación, usted está atascado con el mismo problema de nuevo, sólo que ahora con <a> en lugar de <img>.

EDITAR:Debo añadir que el párrafo anterior es suponiendo que sirven a las imágenes de un nombre de host diferente como lo hacemos nosotros.Si no, obviamente que no será un problema.

tomhaigh tiene un buen punto, y valdría la pena investigar más.

De acuerdo a MSDN, el base tag funciona para todas las fuentes externas, incluyendo las hojas de estilo, imágenes, etc.

Tal vez me estoy perdiendo algo, pero no puedes simplemente hacer lo que yo (y yo pensaba que todos los demás) hacer/es?Es decir, poner todas tus imágenes, css, javascripts, etc en un directorio común es decir:

/inc/images/
/inc/css/
/inc/javascript/
etc

Y, a continuación, se hace referencia a ellos con base de direcciones Url relativas, es decir:

<img src="/inc/images/foo.jpg" />
etc

?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top