Apache qui ne veut rien entendre

Nouveau WRInaute
Bonjour

J'ai beau regarder dans tous les sens, je ne vois pas où peut être le problème. Dans l'espoir qu'un oeil averti le voie ...

Il s'agit donc de faire du rewriting. Je suis en développement, donc en local,avec Lamp et Ubuntu. Normalement, le module Apache est bien activé.

Code:
	xxx@xxx:~$ sudo a2enmod rewrite
	[sudo] password for xxx: 
	Module rewrite already enabled



J'ai essayé de modéliser le problème sur un site de test plus petit que celui sur lequel je travaille ; qui s'est avéré encore trop grand. Donc, j'ai fait une modélisation de la modélisation pour essayer de ne garder que l'essentiel. Ca simule un site qui reperteriorerait des films. L'URL brute est quelque chose comme ça : films.php?id_film=1 et je voudrais une URL comme ça : le-super-film/1.html. J'ai fait le fichier .htaccess suivant :

Code:
	Options +FollowSymlinks 
	RewriteEngine on 

	RewriteRule ^([0-9a-z-]+)/([0-9]+)\.html$ films\.php?id_film=$2

Mais Apache ne veut rien entendre. Le fichier html, connais pas.

Quant au fichier php - désolé d'en mettre autant, mais comme ça il est possible de copier coller et voir tout de suite ce qui se passe - le voici :

Code:
<?php
$films=array(
	1=>"Les Dents de la mer",2=>"Apocalypse Now",3=>"Blade Runner",
	4=>"Star Wars",5=>"Inspecteur Harry",6=>"L'Exorciste");

if(isset($_GET['id_film'])){$id_film=$_GET['id_film'] ;}else{$id_film=1;}
$liens="" ;
foreach($films as $clef =>$film){
	$direct_url = "films.php?id_film=$clef" ;
	$rewrited_url = get_URL($film) . "/" . $clef . ".html" ;
	$liens = $liens . "<li style='margin-bottom:15px;'>" .
		"<a href='$direct_url'>direct : $film</a><br>" .
		"<a href='$rewrited_url'>rewrited : $film</a><br>" .
		"</li>" ;
}
?>

<!DOCTYPE html>
<html><head><title>Films</title>
	<style>a, a:visited{color:blue;text-decoration:none;}
	a:hover, a:active{text-decoration:underline;}</style>
</head><body>
	<h1><?php echo $films[$id_film]; ?></h1>
	<ul><?php echo $liens; ?></ul>
</body></html>

<?php
function get_URL($url_Titre){

	// Suppression de caractères spéciaux
	$caracteres_speciaux = array(';', ',', '.', ':', '/', '(', ')', '<', '>', '=', '+', '*') ; 
	$url_Titre = str_replace($caracteres_speciaux , "", $url_Titre ) ;
	
	//Suppression des espaces avant et arrière
	$url_Titre = trim($url_Titre) ;
	
	// Supression des accents
	    $accent="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ";
	    $noAccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
	    $reecriture=strtr($url_Titre,$accent,$noAccent);
	    
	    $reecriture = strToLower($reecriture) ;

	// On remplace les espaces et les apostrophes par des tirets
	$url_Titre=preg_replace("# #","-",$reecriture);
	$url_Titre=preg_replace("#'#","-",$url_Titre);
	
	// Et voilou
	return $url_Titre ;
	}
?>

Si quelqu'un pouvait avoir une idée ...
 
WRInaute impliqué
Dans ta ligne sur le RewriteRule, l'adresse destinataire de la redirection n'est pas une RegExp, il ne faut donc pas protéger les caractères spéciaux.
Ta ligne:
RewriteRule ^([0-9a-z-]+)/([0-9]+)\.html$ films\.php?id_film=$2
Devrait être
RewriteRule ^([0-9a-z-]+)/([0-9]+)\.html$ films.php?id_film=$2
 
Nouveau WRInaute
Blount a dit:
Dans ta ligne sur le RewriteRule, l'adresse destinataire de la redirection n'est pas une RegExp, il ne faut donc pas protéger les caractères spéciaux.
Ta ligne:
RewriteRule ^([0-9a-z-]+)/([0-9]+)\.html$ films\.php?id_film=$2
Devrait être
RewriteRule ^([0-9a-z-]+)/([0-9]+)\.html$ films.php?id_film=$2


Avant de poster, j'ai essayé beaucoup de choses. A un moment donné, je me suis dit qu'il faudrait peut-être échapper les points. Je viens d'essayer ce que tu as proposé, sans résultat.

Le script que j'ai laissé plus haut fonctionne tout seul. Pas besoin d'autre script (genre index.php), ni de base de données. On peut le copier dans n'importe quel répertoire du serveur - avec le .htaccess puisqu'l s'agit de tester ça - et éxécuter. Je le dis parce que je ne sais pas si c'est une erreur dans mes scripts ou dans ma configuration, et que je suis curieux de savoir si ça marcherait ailleurs.

Je ne l'ai pas précisé : ce que j'obtiens est une erreur 404 ainsi formulée :

Not Found

The requested URL /l-exorciste/6.html was not found on this server.

spout a dit:
Je n'ai tjs pas compris pourquoi se casser la tête avec le rewrite: 1 front controller + 1 règle de rewrite et on px TOUT faire:
https://www.webrankinfo.com/forum/t/pratique-de-htaccess-a-lire-avant-de-poser.132885/#p1217718


... ben ... peut-être parce que c'est ce qui est habituellement conseillé ... C'est la première fois que je vois ce dont tu parles.
 
WRInaute impliqué
Chez moi, en enlevant le fameux slashe, ça fonctionne.

Où est positionné ton fichier films.php par rapport à ton htaccess ?
 
Nouveau WRInaute
Ils sont dans le même dossier, dans le dossier racine d'un hôte virtuel. Peut-être est-ce l'hôte virtuel qui gène ... ?
L'hôte s'appelle enbref.alx. D'abord ils étaient dans un dossier enbref.alx/test. Comme ça ne marchait pas, je les ai mis dans le dossier racine. Mais sans succès.
 
Discussions similaires
Haut