Bonjour,
Voila je rencontre un petit problème avec mon code.
Je travaille avec une structure MVC qui fonctionne bien, mais je voulais faire en sorte avec l'aide d'un htaccess rediriger directement vers ma page index qui se trouve dans le dossier public. Cela fonctionne aussi.
le htaccess
RewriteEngine On
RewriteBase /jbinformatique2017/
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
le chemin pou les images qui fonctionnais avant
dossier/sous-dossier/image.png
message quand je cherche à suivre ce chemin depuis la console d'inspection :
The requested URL /répertoire racine/public/dossier/sous-dossier/image.png was not found on this server.
../dossier/sous-dossier/image.png
message quand je cherche à suivre ce chemin depuis la console d'inspection :
The requested URL /dossier/sous-dossier/image.png was not found on this server.
Je me casse la tête à trouver lbonne façon pour indiquer le bon chemin, mais la je sèche, même après avoir passé beaucoup de temps sur google pour trouver une solution.
Alors pourriez-vous m'aider à résoudre mon problème ? svp
Est ce que tu as configuré phpstorm avec son propre serveur http ?
Pour toutes ces histoires d'urls qui changent entre dev et prod, le mieux est de gérer une variable BASE_URL qui vaut / en prod
et /dossier_racine/ en dev
ensuite le router doit construire des urls absolues BASE_URL/.....
et si c'est bien foutu, gérer différemment les fichiers statics des pages
A la racine tu créer un fichier htaccess avec:
RewriteEngine On
RewriteRule (.*) public/$1 [L]
dans le dossier public tu en creer un autre avec:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]
ai-je répondu à ton problème?
Bonjour Clement,
Merci pour ta réponse.
Pour les fichiers htacces, ça marche nickel; mais les images et logos ne s'affiche plus quand je modifie le chemin rien n'y change, même en tapant dans l'url le chemin de l'image, je suis systématiquement redirigé vers ma page index. Mon site est sur bas MVC . aurais-tu une solution à me proposer ?
Regarde ce qu'a écrit Clément, il y a deux lignes qui contiennent REQUEST_FILENAME, l'une filtre tout ce qui n'est pas un fichier et l'autre filtre ce qui n'est pas un répertoire. ces deux lignes permettent de ne garder que les urls php et pas les fichiers js, images, css ...
Ainsi les fichiers js, images et css shuntent la redirection.
tu dois donc rajouter ces deux conditions en plus de celle que tu as.
Bonjour Huggy,
Je n'ay connais pas grand chose à ce niveau dans ces règle, mais j'ai essayé ceci, les images n'apparaissent toujours pas et ce qui est le plus étrange , c'est que le problème ne se situe que sur les pages qui sont en include dans la page index; Sinon les autres pages tout est nickel, le css, js et images tous va bien.
Voici ce que j'ai écris dans le htaccess se trouvant dans le dossier "public".
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]
Met plutôt
RewriteCond %{REQUEST_FILENAME} !(.*)\.(css|js|png|jpg)$
sinon tu ne cibles que le fichiers .css, .js, .png, .jpg (que les extensions)
Bonjour Huggy, j'ai bien ajouter la ligne que tu m'as soumis, mais rien ne change, :(.
Sur toutes mes pages tous fonctionne à merveille, c'est juste la page qui est include dans ma page index que les image n'apparraissent pas. voici mon architecture.
page index dans le dossier racine_du_site/public, et la page template se trouve dans un dossier racine_du_site/App/views/Template/default.php
et le tout est géré par le controller qui est dans racine_du_site/App/Controller/PostController.php.
Et mes images sont dans racine_du_site/img/mon_image.png
Quand j'inspecte la page index, je n'ai plus dans le bas un message "error 404" Donc l'image devrais s'afficher, mais rien. Pourtant elle est bien dans le dossier, j'ai contrôlé.
Alors je sais je suis perdu
A quoi ressemble le lien de l'image dans la page (dans la balise img) ?
Si c'est un lien relatif à l'emplacement de la page d'index, par exemple src='img/logo.png', c'est normal que ça ne fonctinne plus.
par contre src='/img/logo.png' devrait fonctionner
Le chemin que j'avais c'était ../img/mon_image.png.
Maintenant j'ai fais ce que tu m'as dit, et à l'inpestion j'ai le message "Failed to load ressource: the server responded with a status of 404 (not Found) http://localhost/img/mon_image.pnd.
Entre localhost et img, il manque le dossier racine du site.
J'ai essayé autre chose, j'ai passé par phpstorm pour voir la page d'accueil et modifier l'adresse de l'image : /mon_dossierracine/img/mon°image et là elle s'affiche, mais en passant par wamp elle ne s'affiche pas donc il doit y avoir un soucis au niveau de wamp.
Si c'est seulement la page d'index, il faut peut être essayer une règle rien que pour elle
Options +FollowSymlinks
RewriteEngine On
#regle pour la racine
RewriteRule ^$ /monsite/public/index.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/index.php/$1 [L]
Re Huggy,
A force d'essayer et chercher sur google, j'ai trouver la solution et maintenant tous fonctionne à mervielle.
En faite la ligne de code que tu m'as donnée RewriteCond %{REQUEST_FILENAME} !(.*)\.(css|js|png|jpg)$
je l'ai mise dans le htaccess qui se trouve à la racine. Et ce htaccess ressemble à ceci :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !(.*)\.(css|js|png|jpg)$
RewriteRule (.*) public/$1 [L]
Enfin je suis content que le problème soit résolu. Et je te remercie pour ton aide précieuse et celle de Clément.
Bonne soirée et encore merci