2

これは私の最初の投稿ですので、お手柔らかにお願いします。

基本的に、私は htaccess ファイルを書き直して、作成した検索しやすい URL を実際の URL に変更していますが、ほとんどの場合、それらは機能しています。たとえば、これ:

http://www.negativeworld.org/7849/news/nintendo-download-for-may-24-2012

これに変わります:

http://www.negativeworld.org/article.php?id=7849

結構です...その記事が存在する場合。記事が存在しない場合、php コードはこれを使用します。

header("Location: boarderror.php");
exit;

ユーザーを boarderror.php に誘導します。これは、ユーザーが article.php で直接そこにアクセスし、ID が正しくない場合は正常に機能しますが、検索しやすい URL から htaccess リダイレクトを実行しようとしているときに ID が正しくない場合、htaccess リダイレクトがしばらくハングしてから、 「ページが正しくリダイレ​​クトされていません」というメッセージが表示されます。

私が欲しいのは、悪いIDがあるときに私のboarderror.phpページに行くことです。したがって、基本的には、htaccess ページでサーバーに適した URL を取得し、実際の URL に切り替えて、その時点で手放すと、PHP がそこから取得します。切り替えを行うhtaccess行は次のとおりです。

RewriteRule ^([0-9]+)/(news|review|editorial|podcast)/(.*)$ /article.php?id=$1 [L]

私は何を間違っていますか?(ところで、検索に適したすべての URL を正しく設定すれば、とにかく悪い ID が存在することは決してないはずですが、安全を確保したいと思います...)

4

2 に答える 2

1

あなたの考えは間違っていません。IDが間違っている場合は、二重リダイレクトがありますが、これは問題ありません。問題は、2番目のリダイレクトがどのように発生するかです。試す

header("Location: http://www.negativeworld.org/boarderror.php");

また

header("Location: /boarderror.php");

あなたのリダイレクトで、ブラウザはhttp://www.negativeworld.org/9999/news/boarderror.php(9999が間違ったIDである)試行しています。これは、ブラウザが10回試行した後に切断する無限のリダイレクトループに分類されます。

于 2012-10-20T23:38:44.463 に答える
0

リダイレクトルールは問題ありません。問題はヘッダー関数呼び出しにあります。ファイル名のみを指定すると、ファイル名のみを使用してhtmlリンクを作成するのと同じように、ヘッダーリダイレクトによってユーザーが同じフォルダー内のファイルに移動します。

http://www.negativeworld.org/99999/news/nintendo-download-for-may-24-2012を読み込もうとしたが、そのIDが無効であるとします。この場合、ユーザーをhttp://www.negativeworld.org/99999/news/boarderror.phpに送信します。これにより、リダイレクトが再度トリガーされ、無限ループに陥ります(または、ブラウザーが十分にスマートでない場合は送信されます)。同じURLを何度も要求するのをやめます)。

RFC 2616によると、ロケーションヘッダーは絶対URIを提供する必要があるため、次のようにする必要があります。

header("Location: http://www.negativeworld.org/boarderror.php");
exit;
于 2012-10-20T23:37:00.937 に答える