Est-il possible d'utiliser Route :: Connect to route vers un paramètre de string de requête?

J'essaie de replace une URL comme

mysite.com/uploads:27 

dans mysite.com/uploads/upload?upload=27

Mon plan d'origine était d'utiliser un file .htaccess comme ceci:

RewriteRule ^upload:(.+) /uploads/upload?upload=$1 [L]

Cependant, j'ai constaté que ce n'est pas la meilleure idée puisque le gateau contient plusieurs files .htaccess. En tout cas, la règle ne fonctionnait pas.

Je suis donc allé chercher dans les routes de Cake. Cependant, je ne parviens pas à découvrir comment passer à une URL avec un paramètre de string de requête.

J'ai essayé:

 Router::connect('/upload::upload', array('controller' => 'uploads', 'action' => 'upload', '?' => array('upload' => '23') ) ); 

Cependant, je ne pense pas que Router :: connect soit destiné à fonctionner de cette façon. Aucune donnée de string de requête n'a été transmise au controller de téléchargement. Compte tenu de ce que j'ai lu dans la documentation, je ne m'attendais pas à ce que cela fonctionne.

http://book.cakephp.org/2.0/en/development/routing.html "Le routing est une fonctionnalité qui mappe les URL aux actions du controller" – Je suppose que cela signifie que les parameters de string de requête ne sont pas destinés à cette situation.

Donc, est-ce qu'il y a des moyens pour que je puisse get des routes pour agir de la même manière que j'essayais d'utiliser .htaccess? Je suis surpris qu'il n'y ait pas un moyen de le faire, car le raccourcissement des strings de requêtes avec .htaccess est une tâche aussi commune.

Comme le montre ce tutoriel: http://www.elated.com/articles/mod-rewrite-tutorial-for-absolute-beginners/ ou les documents d'apcahe: http://httpd.apache.org/docs/2.0/misc/ Rewriteguide.html

NB: Je sais bien que le mappage d'URL que je veux (en particulier le téléchargement: 27 syntaxe avec le côlon) est contre les conventions de gateau. Mon application n'est pas configurée pour prendre des choses comme mysite.com/uploads/upload/27, comme le suggèrent les doctors que je devrais faire. Je préférerais plutôt comprendre comment faire comme je l'ai imaginé dans le premier.

Si une redirection est correcte, cela devrait le faire:

 RewriteRule ^upload:(\d+)$ /uploads/upload?upload=$1 [R=302,L] 

Utilisez le file .htaccess situé dans l' app/webroot/ et vous devriez être bon. Voir cet exemple:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule .* - [S=2] RewriteRule ^upload:(\d+)$ /uploads/upload?upload=$1 [R=302,L] RewriteRule ^(.*)$ index.php [QSA,L] </IfModule> 

C'est le file .htaccess original, modifié pour rendre les conditions de réécriture (qui vérifient si la cible demandée est un file ou un dossier existant) s'appliquent aux deux dernières règles de réécriture. Cela fonctionne en ignorant les deux dernières règles ( [S=2] ) dans le cas où les conditions sont vraies.

Voir aussi RewriteRules multiples pour RewriteCond unique dans .htaccess