3

大量のクエリ文字列を含む大量の URL を含むフラットなファイル構造を持つ既存のサイトがありました。私の問題は、CMS を作成し、次のようなクエリ文字列を使用するカスタム エラー コード ページをセットアップしたことです。

ErrorDocument 404 /error.php?errorcode=404

これに関する問題は、古い壊れた URL にクエリ文字列が含まれている場合、エラードキュメントのリダイレクトでクエリ文字列が上書きされることです。たとえば、

www.example.com/missingpage.php - これは機能し、問題なく 404 にリダイレクトされます。

しかし、もしそうなら

www.example.com/missingpage.php?anything=anything

あるいは

www.example.com/missingpage.php?

errorcode=404 クエリ文字列は php ページに到達せず、エラーコードが一致しない場合に設定した一般的なメッセージがスローされます。問題は、あらゆる種類のクレイジーなクエリ文字列を含むリンクが非常に多いため、それらを個別に除外するのが非常に難しいことです。

以前にこの問題に遭遇した人はいますか?

4

3 に答える 3

3

他にできることは、mod_rewrite を使用してクエリ文字列を追加することです。ErrorDocumentターゲットがURLマッピングエンジンを介して戻されるため(少なくともApache 2.4では)、これが他のセットアップで行われるのを見たことがあります。

例えば:

ErrorDocument 404 /error-doc-404
ErrorDocument 405 /error-doc-405
ErrorDocument 500 /error-doc-500

そして、これがあります:

RewriteEngine On
RewriteRule ^error-doc-([0-9]{3})$ /error.php?errorcode=$1 [L]

この方法では、アドレス バーの URL は変更されません。

于 2012-06-04T16:48:58.970 に答える
0

簡単な解決策、特定の 404.PHP ページを作成します。プロジェクトには、これらすべてのカスタム エラー ページ用のディレクトリ全体があります。

于 2012-06-03T06:36:09.193 に答える
0

100% 理想的ではありませんが、別のオプションを見つけました。エラー ドキュメント定義で完全な URL を使用すると、リダイレクトが実行され、元の URL クエリ文字列が無視されます。たとえば、次のようにします。

エラードキュメント /error.php?error=404

ユーザーがページにアクセスするために使用した不正な URL はアドレス バーに残り、クエリ文字列はアドレス バーにあるものによって上書きされます。しかし、もしそうなら

ErrorDocument http://www.google.com/error.php?error=404

その後、リダイレクトが発生し、ユーザーが使用した元の「悪い」URL がエラー ドキュメントの URL に置き換えられます。

ここで知っておくべき注意点があります。これはソフト 404 エラーであるため、検索エンジンはあなたの根性を嫌う可能性があります。

于 2012-06-04T15:51:51.013 に答える