web-dev-qa-db-ja.com

404から検索結果にリダイレクトする.htaccessルール

ユーザー(またはボット)が存在しないページでリクエストした場合、検索結果にリダイレクトしたいと思います。私は次のようなものを使用して.htaccessファイルでそれを行うことを好む:

ErrorDocument 404 /recherche?search_query=${REQUEST_URI} 

ただし、失敗します。 Webブラウザーはrecherche?search_query=${REQUEST_URI}、$ {REQUEST_URI}のURLにリダイレクトされ、置き換えられません。ここで読むことができます。

6
7seb

変数置換はErrorDocumentディレクティブでは機能しません-変更なしでそのままURLを渡します(そのような置換を実行する特別なモジュールがあるかもしれません-私は知りません)。

ErrorDocumentディレクティブを使用する場合は、スクリプト自体で最初に要求されたURLを取得する必要があります(PHPの$_SERVER['REQUEST_URI']など)。 404ハンドラーにそのようなルックアップを実行するよう指示する特別なパラメーターを渡すことができます。 ErrorDocument 404 /recherche?special-search=yes

別のアプローチは、mod_rewriteを使用することで、そのような置換が可能な場合です。例えば:

Options +FollowSymLinks
RewriteEngine On

# redirect all requests to non-existing resources to special handler
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /recherche?search_query=%{REQUEST_URI} [L,R=404]

すでにmod_rewriteを使用している場合は、他のルールと競合しないように、ルールリストの最後のどこかにそのようなルールを配置する必要があります。

2
LazyOne