158 votes

Rediriger tout vers index.php en utilisant htaccess

J'écris un simple framework MVC basé sur PHP. Je veux que ce framework puisse être installé dans n'importe quel répertoire.

Mon script PHP saisit l'uri de la requête et la découpe en segments. Il fait du segment 1 le contrôleur et du segment 2 l'action. Tout se passe bien quand je fais ça :

http://www.example.com/mvc/module/test/

Il sera dirigé vers le contrôleur de module et la méthode spécifiques. J'ai maintenant un contrôleur par défaut, le contrôleur home, qui se trouve dans le dossier home.

Maintenant, lorsque j'accède directement à ce dossier http://www.example.com/mvc/home/ Il affichera un 403 forbidden parce que ce dossier existe, mais il doit aussi retourner à http://www.example.com/mvc/index.php

Si j'avais installé le framework dans un autre dossier, disons le dossier framework, il devrait être redirigé vers http://www.example.com/framework/index.php

Je voudrais rediriger chaque dossier et fichier php vers le fichier index.php, en laissant tout le reste tel quel.

Le premier problème que j'ai rencontré est qu'il ne redirige jamais vers le bon dossier, toujours vers le dossier racine du domaine.

C'est ce que j'ai essayé :

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

1voto

AugustoM Points 6

Au cas où vous vous demanderiez encore comment rediriger toutes les requêtes, que le répertoire existe ou non (pour les dossiers et les fichiers du noyau du framework), vers le gestionnaire d'index du framework, après quelques tentatives d'erreurs/réussites, j'ai juste remarqué que j'avais juste besoin de changer le RewriteCond dans le fichier .htaccess.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

la condition ci-dessus indique "fichiers non trouvés" et "répertoires non trouvés", ok, que se passe-t-il si on supprime la ligne "non trouvé" (!-d), et qu'on obtient quelque chose comme ci-dessous :

RewriteEngine on
RewriteBase /framework/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /framework/index.php [L,QSA]

Ça a marché pour moi comme un charme

0voto

Collins Benson Points 19

Après avoir fait cela, n'oubliez pas de changer votre href dans, <a href="{the chosen redirected name}"> home</a>

Exemple :

.htaccess fichier

RewriteEngine On

RewriteRule ^about/$ /about.php

Fichier PHP :

<a href="about/"> about</a>

0voto

Sadee Points 25

Je viens d'être confronté au même genre de problème avec mon projet Laravel 7, dans un hébergement mutualisé Debian 10. Je dois ajouter RewriteBase / à mon .htaccess dans le répertoire /public/. Ainsi, le fichier .htaccess ressemble à

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

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