4 votes

Les ressources statiques sont incorrectement réécrites dans front-controller index.php

J'ai un problème avec la réécriture des urls. Il se passe ce qui suit :

http://www.example.com/scores
http://www.example.com/registreren
http://www.example.com/login

ces urls seront redirigées vers index.php?route=scores etc.

Tout cela fonctionne très bien. Mais j'ai maintenant des fichiers modèles dans un sous-répertoire comme images y stylesheet . Ces fichiers se trouvent dans

  • template/css/style.css
  • images/images.png etc.

maintenant tous ces fichiers sont également redirigés vers index.php?route . Je suis conscient de la barre oblique et tous les liens vers les fichiers sont des chemins d'accès absolus.

Le code suivant est utilisé dans le .htaccess fichier :

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ index.php?route=$1 [L,QSA]

1voto

rekire Points 16519

Essayez d'ajouter une RewriteBase avec ce code :

RewriteBase /

Selon la configuration du serveur, il est possible que %{REQUEST_FILENAME} contient une barre oblique au début, ce qui produirait un chemin absolu et non relatif.

0voto

w3d Points 3138
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

Si les ressources statiques sont correctement référencées avec des URL relatives à la racine (ou absolues) dans la source HTML (et qu'il n'y a pas de conflit entre les URL de la racine et celles de la ressource statique), les ressources statiques peuvent être référencées dans la source HTML. BASE ), ces conditions devraient déjà exclure les ressources statiques de la réécriture.

Vous pouvez ajouter une condition à votre contrôleur frontal qui exclut les demandes pour des extensions de fichiers spécifiques (en supposant que vos URL qui nécessitent une réécriture ne partagent pas également ces extensions de fichiers).

Il s'agit également d'une optimisation recommandée pour tout contrôleur frontal, car elle permet d'éviter les vérifications inutiles du système de fichiers pour les ressources statiques, qui renverront simplement à un message 404 si elles ne sont pas trouvées (au lieu d'être acheminées via le cadre).

Par exemple :

RewriteEngine On

RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|png|gif)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ index.php?route=$1 [L,QSA]

Ce n'est que lorsque l'URL demandé ne se termine pas par l'une des extensions de fichier indiquées qu'il effectue une vérification du système de fichiers et réécrit éventuellement l'URL en index.php (le contrôleur frontal).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X