7

私はIPBフォーラムを使用しています。私はnginxサーバーのconfを変更してフレンドリーなURLを使用することができました。ただし、トピック(またはフォーラム、メンバーなど)の現在のURLを取得するには、古いフォーラムのURLをリダイレクターphpファイルにリダイレクトする必要があります。例:urlがのような場合/forum/index.php?board=23、redirector.phpにリダイレクトします。

これは、IPBでわかりやすいURLを使用できるようにするための現在の構成です。

    location /forum {
        try_files $uri $uri/ /forum/index.php;
        rewrite ^ /forum/index.php? last;
    }

次のようにこのロケーションブロック内にifステートメントを挿入すると、クエリパラメータ「board」を取得できません。

location /forum {
        if ($arg_board != "") {
            rewrite ^ /redirector.php?q=$arg_board break;
        }
        try_files $uri $uri/ /forum/index.php;
        rewrite ^ /forum/index.php? last;
    }

ここに何が欠けていますか?

4

1 に答える 1

7

あなたの問題は、lastの代わりにbreakを使用することに関係しています。ドキュメントから:

http://wiki.nginx.org/HttpRewriteModule#rewrite

last-現在の書き換えディレクティブの処理を完了し、使用可能なすべての場所からURIで一致するものを検索して、プロセス(書き換えを含む)を再開します。

break-現在の書き換えディレクティブの処理を完了し、非書き換え処理は現在のロケーションブロック内でのみ続行されます。

/forumロケーションブロック内で/redirectorのハンドラーを定義していないため、if(..){rewrite}は目的の処理を実行しません。リライトが適切なロケーションブロックをトリガーできるように、そのブレークを最後にします。

于 2012-06-26T10:02:59.910 に答える