La réécriture d'URL : css, js et les images ne se chargent pas
J'ai règle suivante pour les .htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1
Il redirige http://localhost/detail/123
URL http://localhost/detail.php?id=123
. La redirection de la page correctement, mais le problème est CSS, JS, and images
ne sont pas de chargement,
CSS, js fichiers sont situés sous les http://localhost/css/
et http://localhost/js/
Une solution consiste à utiliser chemin absolu (ex /CSS, ou /js plutôt que de simplement en CSS/, /js, mais cela ne semble pas une solution fiable, puisque nous avons à le changer tous les fichiers,
Toute autre solution basée sur .htaccess
règles, qui est indépendant de la modification de tous les fichiers PHP et laissez-nous utiliser "les chemins d'accès relatifs"?
- vous devez utiliser le chemin absolu basé sur votre système, par exemple si vous utilisez linux, il serait quelque chose comme
/var/www/css/
- ¿Exactement où sont vos css et js répertoires?
- ils sont à
http://localhost/css/style.css
ethttp://localhost/js/js.js
- Je dois également faire un répertoire vide, dans ce cas "détails" pour la réécriture de travail, est-il un moyen de contourner cela?
Vous devez vous connecter pour publier un commentaire.
Ne pas être paresseux et de changer votre Uri relatifs à vos ressources à la racine absolue cheminement comme
/css/style.css
. C'est le meilleur.Vous pouvez obtenir intelligents et de l'utilisation des regex et remplacer tous les fichiers dont vous avez besoin qui serait comme un peu de chemises et vous avez terminé. Combien de places y aurait-il de changer? Et vous devriez être à l'aide d'un modèle.
Cela devrait fonctionner mais je ne voudrais pas aller dans cette voie.
RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
http://example.com/css/style.css
, mais ce type de répertoire racine absolue cheminement:/css/style.css
C'est parce que votre Uri relatifs ont leur base changé. À l'origine, la base est
/
lorsque la page est/detail.php?id=123
, et le navigateur correctement remplit les liens relatifs à la/
de base. Mais lorsque le navigateur accède à une page comme/detail/123
la base devient tout à coup/detail/
et il essaie d'ajouter que devant toutes les Url relatives et donc aucun d'entre eux la charge.Vous pouvez créer vos liens absolue, ou de modifier l'URI de base de l'en-tête de vos pages (entre les
<head> </head>
tags):.htaccess
règles de fichier)<base href="/project/">
et je n'ai pas à changer le chemin d'accès pour tous mes scripts ou des fichiers css. Merci à Jon.J'ai appliqué la réécriture d'url à un projet de base de php. J'ai connu le même problème. css, Js et les images sont pas chargés. J'ai utilisé cela et il a travaillé pour moi. Source
Anthony réponse est parfaitement valable, et il est en train d'essayer de donner de bonnes pratiques.
Cependant, puisque vous ne semblez pas le contenu de cette réponse, voici une solution différente. Il suffit d'insérer cette ligne dans votre .htaccess avant tout Réécrire-Commande:
Il va rediriger tous à l'origine de la 404 demandes d' /détails/css/style.css et /détails/js/js.s pour leur emplacement réel. Ni particluarly belle ni élégant, mais il fonctionne tout simplement.
ce code fonctionne parfaitement pour moi, ajouter avant de rediriger la règle RewriteRule ^de détails/([0-9]+)/?$ détail.le php?id=$1)