web-dev-qa-db-fra.com

Comment rediriger / search / to /? S =

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>   
2
jchwebdev

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.

2
MrWhite