web-dev-qa-db-fra.com

La redirection d'une page vers une autre page de mon site Web génère une erreur 404 après l'utilisation du fichier .htaccess

Je travaille actuellement sur un blog PHP. Où j'ai utilisé un fichier .htaccess pour obtenir une URL propre, voici le code:

RewriteEngine On
RewriteCond %{HTTPS} !=off
RewriteCond %{HTTP_Host} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^([0-9]+)/([a-zA-Z0-9_-]+)?$ post.php?post_id=$1&title=$2 [L]
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]

J'ai ce code en ligne. Comme je suis nouveau sur PHP et sur ce .htaccess, c’est pourquoi je n’en ai pas la moindre idée.

Avant d'ajouter le fichier .htaccess, l'URL était:

http://www.example.com/post.php?post_id=12&title=post-title

Et, URL après avoir ajouté le fichier .htaccess:

http://www.example.com/12/post-title

Alors RewriteRule m'a donné l'URL que je veux. Mais cela a causé une erreur dans la redirection de la page. Avant d’utiliser le fichier .htaccess chaque fois que j’ai cliqué sur le bouton principal après la visite de l’URL suivante:

http://www.example.com/post.php?post_id=12&title=post-title

puis l'URL a été redirigé avec succès vers la page d'accueil, à savoir:

http://www.example.com/index.php

Mais maintenant, après avoir utilisé le fichier .htaccess après avoir visité la même URL, il est redirigé comme suit:

http://www.example.com/12/index.php

Et maintenant, il tire erreur 404 page non trouvée. Car techniquement, il n’existe pas de page de ce type dans le répertoire 12 sur le serveur. Donc, fondamentalement, il ajoute 12 devant chaque fichier.

Donc, après avoir visité le lien suivant: http://www.example.com/12/post-title, je souhaite le rediriger correctement car il redirigeait les pages avant d'ajouter le fichier .htaccess.

2
Mike Kothari

On dirait que vous êtes (incorrectement) lié à une URL relative (par exemple. index.php) au lieu d’une URL relative racine (commençant par une barre oblique, par exemple. /index.php) ou même une URL absolue (Scheme + Host + URL-path).

Par exemple, si vous créez un lien vers index.php et que vous vous trouvez à l'URL /12/post-title, le problème sera naturellement résolu en /12/index.php (incorrect). Alors que si vous deviez créer un lien vers /index.php, cela résoudra alors en /index.php (correct).

Cependant, voulez-vous vraiment index.php dans vos URL? Vous voudriez normalement établir un lien vers le répertoire (avec une barre oblique) et laisser le serveur répondre avec l'index de répertoire approprié. Par exemple:

<a href="/">Home</a>
1
DocRoot