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!
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.
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.
lier les fichiers css par rapport au répertoire racine
<link rel="stylesheet" type="text/css" href="/css/****.css">
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:
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 /
.
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.
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.
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>
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/
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.
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
Ajoutez simplement le chemin de base après la balise d'ouverture. Par exemple:
<base href="website url here">
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.