この場合、書き換えルールを使用するのではなく、index.phpからリダイレクトすることをお勧めします。書き換えルールにもコストがかかり、ページが読み込まれるたびにチェックされます
index.phpの冒頭:
<?php
if(!empty($_GET["search"]))
{
header("Location: search?q=".rawurlencode($_GET["search"]));
exit;
}
?>
Olaf Dietscheがコメントで正当に指摘したように、mod_rewrite は PHP よりも優れているため、問題はindex.php と他のファイルのヒット率が実際にはどのくらいかということです。それが低い場合は、php のアプローチが確実に優れていますが、index.php が 50% 程度の確率でヒットする場合は、書き直したほうがよいかもしれません。
したがって、 mod_rewrite ソリューションも追加します。
RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)search=([^&]+)
RewriteRule ^index.php$ /search?q=%1 [R,L]
RewriteCond
実際にsearch=
クエリ文字列パラメーターを探し、それが空でないことを確認しますそして、ルールは index.php から/search?q=<query>
Note に何かを単純に書き換え%1
ます (ルール自体の一致部分からではなく、条件から一致した最初のキャプチャされたサブパターンに一致するために使用されます)。どちらの場合に使用する必要があります$1
)。
しかし、本当の問題は、そもそもなぜこの問題に対処しているのかということです。ページで値を送信して検索を行う場合、それはフォームの送信であるため、ハンドラーを直接指すことができ、後でそこにリダイレクトされることはありません。これははるかに効率的です。
<form action="/search" method="get">
<input type="text" name="q">
...
このように、検索フォームから送信されたものはすべてに直接送信され、/search
対処するためのリダイレクトは必要ありません。