web-dev-qa-db-fra.com

Règle .htaccess pour rediriger les résultats de la recherche depuis 404

Lorsqu'un utilisateur (ou un bot) demande sur une page non existante, je souhaite le rediriger vers les résultats de la recherche. Je préfère le faire avec le fichier .htaccess en utilisant quelque chose comme:

ErrorDocument 404 /recherche?search_query=${REQUEST_URI} 

Cependant, cela échoue. le navigateur Web est redirigé vers l'URL recherche?search_query=${REQUEST_URI}, $ {REQUEST_URI} et n'est pas remplacé, il est tel que vous pouvez le lire ici.

6
7seb

La variable de remplacement ne fonctionnera pas dans la directive ErrorDocument - elle transmettra l'URL sans modification (peut-être qu'un module spécial effectuera ce remplacement - je ne le sais pas).

Si vous voulez utiliser la directive ErrorDocument, vous devrez récupérer l'URL demandée à l'origine dans le script lui-même (par exemple, $_SERVER['REQUEST_URI'] en PHP). Vous pouvez transmettre un paramètre spécial pour indiquer à votre gestionnaire 404 d'exécuter une telle recherche, par exemple. ErrorDocument 404 /recherche?special-search=yes.

Une autre approche consisterait à utiliser mod_rewrite, où un tel remplacement est possible. Par exemple:

Options +FollowSymLinks
RewriteEngine On

# redirect all requests to non-existing resources to special handler
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /recherche?search_query=%{REQUEST_URI} [L,R=404]

Si vous utilisez déjà mod_rewrite .. cette règle doit être placée quelque part à la fin de votre liste de règles pour ne pas être en conflit avec d'autres règles.

2
LazyOne