web-dev-qa-db-fra.com

Renvoyer une erreur 404 après avoir utilisé RewriteRule sur localhost

Je voudrais utiliser localhost/projects/project1/page/x au lieu de localhost/projects/project1/index.php?page=x. Mais après avoir redirigé l'URL dans .htaccess à l'aide de RewriteRule, ma page d'erreur 404 est renvoyée.

Voici mon code:

ErrorDocument 404 /projects/project1/pagenotfound.php

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^projects/project1/page/([0-9]*)$ /projects/project1/index.php?page=$1 [L,QSA,NC]

SOLUTION

ErrorDocument 404 /projects/project1/pagenotfound.php

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([0-9]*)$ /projects/project1/index.php?page=$1 [L,QSA,NC]
5
Márton Juhász

Mon .htaccess est dans le même répertoire que le fichier index.php, donc: localhost/projects/project1/.htaccess

C'est le problème, ou plutôt votre modèle RewriteRule est le problème, en fonction de la façon dont vous le regardez.

Dans les fichiers .htaccess (par répertoire), le préfixe par répertoire est d'abord supprimé de l'URL avant la correspondance avec le modèle. Donc, si votre fichier .htaccess est à /projects/project1/.htaccess, votre motif RewriteRule doit exclure /projects/project1/ du début (pour la même raison, vous supprimez le préfixe / du motif dans la racine du document). En d'autres termes...

RewriteRule ^page/([0-9]*)$ /projects/project1/index.php?page=$1 [L,QSA,NC]

Ou déplacez votre fichier .htaccess vers la racine du document.

1
MrWhite