Redirections permanentes avec CakePhp

WRInaute discret
Bonjour,

j'ai un site développé avec CakePhp qui était précédemment en PHP simple.
Jusqu'à ce que j'utilise CakePhp, je ne faisais jamais d'URL Rewriting.

La version précédente de mon site comportait donc des pages de type /liste.php?edition=08 qui s'écrivent aujourd'hui /edition/08

je suis loin d'être experte en rewriting et je n'arrive pas à rediriger /liste.php?edition=08 vers /edition/08 (qui est une URL ré-écrite par CakePhp), ça me fait une erreur 404 (normal)

voici un extrait de mon htaccess, il y a surement des choses qui se contredisent, mais je ne sais pas quoi

Code:
SetEnv PHP_VER 5
SetEnv REGISTER_GLOBALS 0
SetEnv SESSION_USE_TRANS_SID 0
RewriteEngine on

<IfModule mod_rewrite.c>
	# retrait de la chaine ?CAKEPHP= et ?PHPSESSID= des URLs
	RewriteCond %{QUERY_STRING} CAKEPHP=(.*)$
	RewriteRule (.*) %{REQUEST_URI}? [R=301,L]
	
	# redirection d'anciennes URLs indexées
	RewriteRule ^variable$ / [R=301,L]
	rewriteRule ^cartes-hasard.php$ /cartes/cartes_hasard [R=301,L]
	
	RewriteRule ^liste.php?edition=([0-9]*)$ /edition/$1 [R=301,L]
	RewriteRule ^liste.php?edition=([0-9]*)&page=([0-9]*)$ /edition/$1/page:$2 [R=301,L]
	RewriteRule ^affiche-carte.php?id=([0-9]*)&PHPSESSID=(.*)$ /carte/$1 [R=301,L]
	RewriteRule ^affiche-carte?id=([0-9]*)&PHPSESSID=(.*)$ /carte/$1 [R=301,L]
	RewriteRule ^affiche-carte.php?id=([0-9]*)$ /carte/$1 [R=301,L]
	RewriteRule ^affiche-carte?id=([0-9]*)$ /carte/$1 [R=301,L]
	
	# redirection des URLs avec / final vers la même URL sans / final
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|)$
	RewriteRule ^(.*)$ http://www.tcg-seigneurdesanneaux.net/$1 [L,R=301]
	
	# redirection de domain.tld vers www.domain.tld
	RewriteCond %{HTTP_HOST} !^www\.tcg-seigneurdesanneaux\.net [NC]
	RewriteRule (.*) http://www.tcg-seigneurdesanneaux.net/$1 [QSA,R=301,L]
	
	# redirection de index.php (et autres extensions) vers /
	RewriteCond %{REQUEST_URI} ^/index.(htm|html|php)$
	RewriteCond %{THE_REQUEST} /index.(htm|html|php)
	RewriteRule ^(.*)index.(htm|html|php)$ /$1 [R=301,L]
	
	# redirection d'URL CakePhp
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

merci d'avance, je ne sais plus trop que faire

NB : je suis chez OVH, j'ai eu des problèmes avec RedirectPermanent
 
WRInaute accro
Tu aurais eu plus de chance d'avoir une réponse sur le forum francophone: http://forum.cakephp-fr.org/
Tu peux créer un AppError:
http://cakebaker.42dh.com/2006/06/15/writing-a-custom-error-handler/
http://api.cakephp.org/class/error-handler

Et faire ta redirection 301 dans la méthode MissingController:
PHP:
<span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />class AppError extends ErrorHandler </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    public function missingController</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$params</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        die</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">env</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'REQUEST_URI'</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br />}<br /></span><span class="syntaxdefault">?><br /></span></span>
A partir du REQUEST_URI tu rediriges en PHP vers ta bonne URL.
C'est bien plus simple qu'en .htaccess
 
WRInaute discret
merci,
comme je pensais vraiment le faire en htacces, j'ai préféré demander sur un forum axé htaccess plutôt que sur le support CakePhp.

En tout cas, ça fonctionne ;)
 
Discussions similaires
Haut