web-dev-qa-db-ja.com

/ search /を/?s =にリダイレクトする方法

典型的なWordpressサイトがあり、典型的なGET形式を使用する典型的な検索ページが設定されています

    <form id="searchform" action="http://example.com" method="get">
        <input id="s" type="text" name="s" placeholder="Search Again">
    </form>

ユーザーの利便性のために、次のURLを検索ページにリダイレクトさせたいと思います。

http://example.com/search?search-term

リダイレクト先:

http://example.com/search/search-term

どうすればいいですか?

ユーザーが検索パラメーターを入力しなくても、これが機能する必要があります。つまり、ユーザーが次を入力した場合:

http://example.com/search/

...表示されるURLはそのままにしておく必要があります

http://example.com/search/

典型的ではない

http://example.com/?s=

...ページがまだWordpress検索テンプレートにリダイレクトしている場合でも。

それが理にかなっていることを願っています。

更新:私が得ることができた最も近いものはこれです:

<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

クエリ文字列(最初の?の後のすべて)と照合するには、RewriteCondディレクティブを使用し、QUERY_STRINGサーバー変数と照合する必要があります。 RewriteRulepatternは、URLパスとのみ一致します。

.htaccessで次のようなものを試してくださいbeforeany WordPress rewrites:

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^search/?$ /?s=%1 [R=302,L]

ユーザーが/search?[something]をリクエストすると、リダイレクトされます。 [something]は完全にオプションです。

これは一時的な(302)リダイレクトであり、正常に動作していることが確実な場合は永続的な(301)に変更します。


PDATE:クエリ文字列を使用して検索語を渡す代わりに(つまり、/search?search-term、代わりにURLパスを使用します(つまり、/search/search-term)。元のURLを保持します。ブラウザで(つまり、外部から/?s=にリダイレクトしないでください)、代わりに次のようなものを試してください:

RewriteRule ^search(/(.*))? index.php?s=$2 [L]

(これは、上記のディレクティブをbothに置き換えます。)

これにより、/search/search/、または/search/search-termのいずれかを指定でき、URLはブラウザーのアドレスバーに残ります。

2
MrWhite