web-dev-qa-db-fra.com

CSS ne charge pas après la redirection avec la règle de réécriture htaccess

J'ai le short-hand suivant pour une URL de profil utilisateur

RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1

Le site est stylé avec le fichier css approprié quand je fais site.com/name_of_user

mais pas quand je fais site.com/name_of_user/

Bien que la redirection soit à la bonne page ...

L'aide est appréciée!

15
algorithmicCoder

la solution la plus simple consiste à spécifier le chemin d'accès complet de votre fichier CSS dans le <head> du fichier HTML.

Si votre règle mod_rewrite modifie le chemin d'accès à l'emplacement de votre fichier CSS, vous souhaitez également le placer avant votre RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-f

Cela garantit que la demande ne correspond pas à un fichier avant de le réécrire.

22
Steve Lewis

J'ai eu le même problème et j'ai trouvé la solution la plus simple et la plus pratique.

<base href="http://www.example.com/" />

C'est super propre et facile à utiliser.

12
Query

lier les fichiers css par rapport au répertoire racine

<link rel="stylesheet" type="text/css" href="/css/****.css">
11
Chamika Sandamal

Lorsque l'URL de votre page est example.com/name_of_user/, le chargement de la ressource css/js/images peut poser des problèmes si votre page HTML utilise chemins relatifs pour ces ressources. C'est parce que le navigateur résout les URL de ressources en utilisant l'URL actuelle.

Ainsi, par exemple, si une balise de style est:

<link rel="stylesheet" type="text/css" href="static/style.css">

et l'URL de votre page actuelle est:

http://example.com/name_of_user/

Ensuite, le navigateur résoudra l'URL css en tant que example.com/name_of_user/static/style.css au lieu de example.com/static/style.css. Cela entraînera 404 pour les URL de ressources et votre page sera affichée sans style, scripts et images.

Vous pouvez résoudre ce problème en utilisant l’une des méthodes suivantes:

  1. Utilisez un chemin absolu dans vos fichiers css, js, images plutôt que relatif. Ce qui signifie que vous devez vous assurer que le chemin d'accès à ces fichiers commence par http:// ou une barre oblique /.

  2. Sinon Vous pouvez ajouter ceci juste en dessous de <head> section du code HTML de votre page: 

    <base href="/" />
    

de sorte que chaque URL relative est résolue à partir de cette URL de base et non à partir de l'URL de la page en cours.

7
anubhava

Essayez de définir correctement la base de vos documents html:

<head>
  <base href="http://example.com/">
<head>

Ensuite, les barres obliques (/) supplémentaires dans vos règles .htaccess ne modifieront pas le chemin des sources externes dans vos documents HTML. La règle suivante

RewriteEngine On
RewriteBase /
RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1 

ne provoquera pas ce comportement avec <base href="http://example.com/"> dans le <head>. du document. Cela fonctionnera correctement, en particulier pour les structures de fichiers de site relatives.

6
uxmal

Essaye ça:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\.(gif|jpg|png|jpeg|css|js|swf)$ /public/$1.$2 [L,NC]

    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

</IfModule>
2
Thanh Siel

Le moyen le plus simple consiste à utiliser <base href="site url here">, et cela devrait se faire peu de temps après la balise HTML head d'ouverture. L'URL du site doit commencer par http ou https; si vous êtes sur localhost, utilisez http, par exemple 

http://localhost/road/ 
1
RewriteCond %{REQUEST_FILENAME} !-f

Cela fonctionne comme un régal. Au départ, j'avais un problème même avec un lien absolu. Merci et +1 à Steve Lewis.

1
Vijay Kumar Kanta

Lorsque vous utilisez ce site.com/name_of_user/, vous changez le répertoire de travail de votre site de root à name_of_user. Par conséquent, le chemin relatif de chaque fichier ou lien sur la page demandée devient /name_of_user/ au lieu de /.

Pour résoudre ce problème, vous devez ajouter une règle supplémentaire à .htaccess:

RewriteRule ^name_of_user/(.*)?$ $1
0
razzak

Ajoutez simplement le chemin de base après la balise d'ouverture. Par exemple:

<base href="website url here">
0
Ahmad Lone

J'ai eu ce qui semble être le même problème. J'essayais de rediriger à partir d'un site de la forme: Www.foo/category/details.

J'ai trouvé la barre oblique après que "catégorie" empêchait le chargement du CSS et des images.

La cause en est que la redirection par défaut transmet l'URL d'origine au navigateur. Cela peut être vu à partir d'une trace JScript sur window.location.pathname. La solution consiste simplement à utiliser un indicateur [R] dans la règle de réécriture.

0
John McMillan