典型的な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>
クエリ文字列(最初の?
の後のすべて)と照合するには、RewriteCond
ディレクティブを使用し、QUERY_STRINGサーバー変数と照合する必要があります。 RewriteRule
patternは、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はブラウザーのアドレスバーに残ります。