J'ai un site typique Wordpress, avec une configuration de page de recherche typique qui utilise le format GET typique
<form id="searchform" action="http://example.com" method="get">
<input id="s" type="text" name="s" placeholder="Search Again">
</form>
Pour la commodité des utilisateurs, j'aimerais que l'URL suivante soit redirigée vers la page de recherche:
http://example.com/search?search-term
Rediriger vers:
http://example.com/search/search-term
Comment puis-je faire cela?
J'ai besoin que cela fonctionne même si l'utilisateur n'entre aucun paramètre de recherche. En d'autres termes, si l'utilisateur entre:
http://example.com/search/
... l'URL affichée doit rester
http://example.com/search/
Pas le typique
http://example.com/?s=
... même si la page redirige toujours vers le modèle de recherche Wordpress.
J'espère que cela avait du sens.
MISE À JOUR: Le plus proche que j'ai pu obtenir est la suivante:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# redirect /search/param to /?s=param
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^search/?$ /?s=%1 [R=302,L]
#standard wordpress stuff
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Afin de faire correspondre la chaîne de requête (tout après le premier ?
), vous devez utiliser une directive RewriteCond
et vérifier la variable de serveur QUERY_STRING. Le modèle RewriteRule
correspond uniquement au chemin URL.
Donc, essayez quelque chose comme ce qui suit dans .htaccess, avant toute WordPress réécrit:
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^search/?$ /?s=%1 [R=302,L]
Si l'utilisateur demande /search?[something]
, il est alors redirigé. Où [something]
est entièrement facultatif.
Ceci est une redirection temporaire (302), remplacez-la par une permanente (301) lorsque vous êtes sûr que tout fonctionne correctement.
PDATE: Au lieu d'utiliser la chaîne de requête pour transmettre le terme de recherche (c.-à-d. /search?search-term
, utilisez plutôt le chemin de l'URL (c.-à-d. /search/search-term
). Et conservez l'URL d'origine. dans le navigateur (c.-à-d. ne redirigez pas en externe vers /?s=
]), puis essayez quelque chose comme ce qui suit:
RewriteRule ^search(/(.*))? index.php?s=$2 [L]
(Ceci remplace les deux les directives ci-dessus.)
Cela vous permet de spécifier /search
, /search/
ou /search/search-term
et l'URL reste dans la barre d'adresse du navigateur.