Salut tout le monde,

J'ai mis à la racine de mon site est une page .htaccess pour réaliser un url rewriting, jusqu'à présent je faisais passer ces liens http://monsite.fr/index.php?p=news en http://monsite.fr/news.
Ma page news.php liste les news avec la possibilité de cliquer dessus pour me rendre sur une page voir_news.php qui permet de voir la news complète avec les commentaires.

Donc, dans les liens j'ai : http://monsite.fr/voir\_news?id=37 ; ceci me permet de voir la news avec l'id 37.
Mais voilà, c'est pas sexy du tout, j'ai essayer de faire un petit url rewriting pour afficher : monsite.fr/news/37.
Mais ca ne marche pas..

Voici mon fichier .htacces :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]
RewriteRule news/([0-9]+) voir_news?id=$1 [QSA,L]

Merci !

17 réponses


Gregory
Réponse acceptée

Tu as essayé d'inverser tes réécritures?

Babou
Auteur

Up? :p

Ca ne peut pas marcer vu que "voir_news" c'est déjà une URL réécrite non ? ou bien il te manque le ".php"

Ca donnerait ça :

RewriteRule news/([0-9]+) voir_news.php?id=$1 [QSA,L]
Babou
Auteur

En effet, il s'agit bien d'une url déjà réécrite.
Et ca ne marche pas quand on rajoute le ".php" :/

Ben si c'est une url déjà réécrite c'est normal que cela ne marche pas. Mais je ne vois pas de trace de cette réécriture ?

Au final ca te servirait à quoi d'avoir 2 réécritures pour une même url ? :) Il faudrait un redirect 301 sur l'une des 2 si tu es déjà référencé avec une.

Babou
Auteur

Ben ca serait pour avoir des url plus simples, et aussi pour éviter tous type de hacks, pour qu'on ne voyent pas la véritablrl et par la suite la trafiquer.
Tu ne saurais pas comment faire pour afficher les urls comme je le souhaite ?

Non mais ok pour le principe de réécrire les URLS, mais tu me dis que voir_news provient déjà d'une réécriture d'url.
Si c'est le cas : soit tu vire cette règle (mais je ne la vois pas et auquel cas elle manque du coup) soit tu l'ajoutes pour que ton serveur comprenne que toto.php = voir_news et que voir_news = news/blabla.

Babou
Auteur

Je vais essayer de réépliquer un peu mieux, j'aimerai réécrire cette url : index.php?p=voir_news&id=37 en news/37
Voilà, et ca je n'y arrive pas..

Ok :) C'est plus clair.
Met ça, ça devrait le faire :

RewriteRule news/([0-9]+) index.php?p=voir_news&id=$1 [QSA,L]
Babou
Auteur

Ca ne marche toujours pas..
Peut être que c'est mon fichier index.php qui pose problème,il est la racine de mon site et il permet d'inclure mes pages en fonction des urls, le voici :

<?php
session_start();
require "config.php";
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host='.DB_HOST.';dbname='.DB_BDD.'', DB_LOGIN, DB_PASS, $pdo_options);
mysql_query('SET NAMES "UTF8"');

define("WEBROOT", "/Url/");
if(!isset($_GET'p'])){ $_GET'p']="index"; }
if(!file_exists("content/".$_GET'p'].".php")){ $_GET'p']="404"; }
ob_start();
include "content/".$_GET'p'].".php";
$content = ob_get_contents();
ob_end_clean();
include "template.php";
?>

Est ce que l'url_rewrite est bien actif? Si oui quel est le message d'erreur dans les logs serveurs?

Babou
Auteur

Je suis pas en local, et oui l'url_rewrite est déjà activé !

tu peux nous dire ce qu'il y a dans les logs?

Babou
Auteur

Quand je le test en local, ca me fait cette erreur :

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.

oui mais ça c'est pas les logs du serveur c'est le message d'erreur qui s'affiche sur ta page

Le message dans les logs va permettre de voir l'erreur un peu plus précisément

Et la redirection de Snot ne fonctionne pas même si tu enlèves celle ci
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]?

Babou
Auteur

Si, en effet si j'enlève celle-ci ca marche en effet.
Tu veux toujours voir les logs de mon localhost sous wamp?

Babou
Auteur

J'y avais pas penser, ca marche nickel maintenant :)