1

以前は PHP で作成されていた Web サイトを Rails を使用して書き直しました。基本的には、投稿で構成されるブログ プラットフォームです。古い URL スキームを使用して、まだ Google からリクエストを受けています。インデックス ページをレンダリングしていますが、参照されている特定の投稿を表示する必要があります。例えば:

http://domain.com/posts?page=5&postID=6433 (レンダリング インデックス、5 ページ)

次のようにする必要があります。

http://domain.com/posts/6433 (投稿 6433 を表示)

page パラメーターは破棄できます。これはコメントのページ付けに使用されていたため、不要になりました。これらのパラメーターはどちらも params[:page] および params[:postID] として Rails に渡され、posts コントローラーの index アクションに渡されます。コントローラーにいくつかのロジックを追加できると思います( :postID が存在する場合、正しい投稿を表示します)が、現在私が使用しているURLを再作成するためにnginxの書き換えを使用するのが正しい方法だと思います:

rewrite "^/posts\?page=(.*)&postID=(.*)$" /posts/$2 break;

渡された URL には何の影響もないようです。

正しい書き換え URL を作成するため、または RoR ルーティングが機能するためのヘルプを探しています。

4

2 に答える 2

1

?、正規表現において特別な意味を持ちます。これは、その前の式 (この場合は文字s) が 0 回または 1 回出現すると予想されることを指定します。

?を使用してエスケープする必要があります\:

rewrite "^/posts\?page=(.*)&postID=(.*)$" /posts/$2 break;
于 2013-02-10T21:28:08.743 に答える
0

これを解決した方法は次のとおりです。

if ($arg_postID ~ "^([0-9]+)"){
  rewrite ^/(.*) /posts/$arg_postID? permanent;
}

無事回しました

http://ihatethemarinecorps.com/posts?page=5&postID=8861

の中へ

http://ihatethemarinecorps.com/posts/8861

nginx は、引数 (? の後のもの) を残りの URI とは少し異なる方法で処理することが判明しました。書き直しでも $arg_page にアクセスできましたが、その必要はありませんでした。より良い答えがあれば教えてください。

于 2013-02-12T01:38:34.510 に答える