Question

Je développe un site Web PHP qui utilise le routage d’URL. J'aimerais que le site soit indépendant du répertoire, de sorte qu'il puisse être déplacé de http://site.example.com/ sur http://example.com/site/ sans avoir à modifier tous les chemins dans le code HTML . Le problème survient lorsque je crée un lien vers des fichiers non soumis au routage, tels que des fichiers CSS, des images, etc.

Par exemple, supposons que la vue pour l'action index du contrôleur welcome contient l'image img/banner.jpg. Si la page est demandée avec l'URL http://site.example.com/welcome , le navigateur demander l'image comme http://site.example.com/img/banner.jpg , ce qui est parfaitement bien. Mais si la page est demandée avec l’URL, http://site.example.com/welcome/index, le navigateur pensera que <img src="<?php echo url::base(); ?>img/banner.jpg" /> est un répertoire et essaiera d'extraire l'image en tant que http://site.example.com/welcome/img/banner.jpg , ce qui est évidemment faux.

J'ai déjà envisagé certaines options, mais elles me semblent toutes imparfaites:

  • Utilisez la réécriture d'URL pour rediriger les demandes de ( *. css | *. js | ...) ou de ( css / * | js / * | ...) sur le bon chemin.

    Problèmes : chaque extension doit être nommée dans les règles de réécriture. Si quelqu'un ajoute un nouveau type de fichier (par exemple, un fichier mp3), il ne sera pas réécrit.

  • Ajoutez le chemin de base à chaque chemin relatif avec une fonction php. Par exemple:
    <=>

    Problèmes : semble désordonné; css - et les js -fichiers contenant des chemins doivent être traités par PHP.

Alors, comment gardez-vous un répertoire de sites Web indépendant? Existe-t-il un moyen meilleur / plus propre que ceux que j'ai proposés?

Était-ce utile?

La solution

Vous pouvez mettre dans la tête

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

Cela signifie que le navigateur demandera toutes les URL non absolues relatives à ce chemin. Cependant, je ne suis pas sûr de l'impact que cela aurait sur les URL incorporées dans les fichiers CSS, etc. Cela n'affecte pas les chemins définis dans les fichiers CSS. (merci mooware)

Autres conseils

La chose <base> fonctionnera, mais vous devez vous rappeler que cela affectera également vos balises <a>. Considérez cet exemple.:

<!-- 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 vous utilisez un appel de fonction PHP pour créer vos liens, ce ne sera pas un problème, vous pouvez simplement vous assurer qu'il crache une URL absolue. Mais si vous (ou vos concepteurs) codez à la main les balises <img>, vous vous retrouvez de nouveau avec le même problème, juste maintenant avec <=> au lieu de <=>.

EDIT: J'ajouterais que le paragraphe ci-dessus suppose que vous fournissez des images provenant d'un nom d'hôte différent, comme nous le faisons. Si vous ne le faites pas, ce ne sera évidemment pas un problème.

tomhaigh a un bon point et mériterait d’être approfondi.

Selon MSDN , le < Une balise href = "http://msdn.microsoft.com/en-au/library/ms535191(VS.85).aspx" rel = "nofollow noreferrer"> base fonctionne pour toutes les sources externes, y compris le style. feuilles, images, etc.

Peut-être me manque quelque chose, mais vous ne pouvez pas simplement faire ce que je (et je pensais à tout le monde) fait / es? Mettez toutes vos images, css, javascripts, etc. dans un répertoire commun, c.-à-d.:

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

Et faites ensuite référence à eux avec des URL relatives à la base, c'est-à-dire:

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

?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top