Apache 2.4.6をmod_alias
で使用しており、他のWebサイトのリンクからトラフィックを受け取っているWebサイトがあり、それを制御することはできません。他のサイトのリンクの形式が不適切であるため、外部サイトから私のサイトにアクセスした訪問者はすぐに400
エラーを受け取ります。 URLは何らかの理由でリテラル%
記号で終わります:domain.com/news/october_news.pdf%
(サイドノート:発信元のWebサイトにアクセスできず、不明な理由でURLを変更しないと言えば十分です。)
私のサイトではmod_alias
とRedirect
ディレクティブを頻繁に使用しているため、一貫性を維持し、将来のWebマスターのために同じディレクティブを使用することを望んでいました。ドキュメントを読んだことは可能に思えますが、それを機能させることができませんでした。 URL domain.com/news/october_news.pdf%
にアクセスする人をdomain.com/news/october_news.pdf
に301リダイレクトしようとしています。基本的には、パーセント記号をハックする必要があります。 mod_alias
とRedirect
を使用してどのように処理しますか?または、単にそれを行うことができないため、RedirectMatch
を使用する必要があります。
現在、.htaccess
ファイルで次のそれぞれを試しました:
redirect “/news/october_news.pdf%” “/news/october_news.pdf”
redirect “/news/october_news.pdf%25” “/news/october_news.pdf”
redirect “/news/october_news.pdf\%” “/news/october_news.pdf”
これらはすべて、Apacheがブラウザに返す400 Bad Request
エラーを変更していません。
Mod_alias Redirect
(またはmod_rewrite RewriteRule
-before mod_aliasを実行)を使用して400の「不正な要求」をキャッチすることはできません。これは、.htaccess
とサーバー構成の両方のディレクティブに適用されます。 「不良リクエスト」は、リクエストのかなり早い段階でトリガーされます。
実際、.htaccess
で不正なリクエストをトラップすることはできません。 .htaccess
は処理されることさえありません-遅すぎます。
ただし、@ Stephenがコメントで示唆したように、カスタム400エラードキュメントをserver configで定義し、サーバー側スクリプト(PHPなど)を使用してそのようなリクエストを調べて、オーバーライドリダイレクトを発行できます。ただし、このエラードキュメントはmustserverまたはvirtualhostコンテキストで定義されている必要があります。 .htaccess
(または<Directory>
コンテナー)は遅すぎます。たとえば、<VirtualHost>
コンテナで直接:
ErrorDocument 400 /errordocs/e400.php
次に、PHPの場合、%
スーパーグローバルのREDIRECT_URL
(またはREQUEST_URI
)インデックスを使用して、要求されたURL(末尾の$_SERVER
を含む)を調べることができます。適切なリダイレクト。
デフォルトの400応答が適切なリンクを備えた合理的でユーザーフレンドリーなメッセージを返すことを確認してください。そうしないと、ブラウザーのデフォルトが取得される可能性があります。
redirect “/news/october_news.pdf%” “/news/october_news.pdf”
脇:引数を囲むために中括弧“
..”
を使用するべきではありません-リクエストは決して一致しません(この理由でも)。引数を囲む必要がある場合は、直線の二重引用符を使用する必要があります。 "
。
これは302(一時)リダイレクトでもあります(テストのためだけに行ったのでしょうか?)。これは最終的に301(永続)リダイレクトになります。