Problème url rewriting

Par Babou, il y a 14 ans


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

Babou, il y a 14 ans

Up? :p

SnoT, il y a 14 ans

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, il y a 14 ans

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

SnoT, il y a 14 ans

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, il y a 14 ans

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 ?

SnoT, il y a 14 ans

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, il y a 14 ans

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..

SnoT, il y a 14 ans

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, il y a 14 ans

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";
?>
Gregory, il y a 14 ans

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

Babou, il y a 14 ans

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

Gregory, il y a 14 ans

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

Babou, il y a 14 ans

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.
Gregory, il y a 14 ans

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, il y a 14 ans

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

Gregory, il y a 14 ans

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

Babou, il y a 14 ans

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