1

変えようとしている

http://site.com/show_page.php?name=terms

http://site.com/pages/terms.html

私は通常、いくつかのサイトをセットアップし、過去にいくつかの作業を行ったNginxにかなり精通しています。これは、conf vhost での URL の書き換えです。置き換えてみましbreaklastが、うまくいきませんでした。

location /pages {
    rewrite ^/pages/(.*)$.html /show_page.php?name=$1? break;
} 
4

3 に答える 3

2

ジャグスラーの答えは大丈夫ですが、これを覚えておく必要があります:

server {
    # you config here (servername, port, etc.)

    location /pages {
        #***modified . = any character, so escape literal dots***
        rewrite ^/pages/(.*)\.html$ /show_page.php?name=$1? last;
        #***the line bellow will only be executed if the rewrite condition***
        #***equals false, this is due to the "last" modifier in the rewrite rule***
        include php.conf;
    } 

    # instead of the php location block also just add the include
    include php.conf;
}

そのため、書き換えルールの修飾子の動作に注意してください。「最後」とは、書き換え条件が true の場合、要求された uri を書き換え、新しく書き換えられた uri に適合するロケーション ブロックにジャンプすることを意味します。

別の修飾子は「ブレーク」です。これは、書き換え条件が true の場合、要求された uri を書き換えますが、ジャンプしないで、代わりに同じロケーション ブロックに留まり、ブロック内の次の行に進むことを意味します。

于 2015-07-08T00:03:10.520 に答える
2

あなたの声明のドル記号はそこに属していません。ドル記号は文字列の終わりを示します。したがって、試合を成功させるためには、その後に何も来ることはできません。残りの部分については、あなたの書き直しは正しいので、php ステートメントが見つからないというジャグスラーのコメントは無視してかまいません。ドキュメントで明確に説明されているように、これは正しくありません。最後のディレクティブは、一致する新しい場所を検索するよう nginx に指示します。このステートメントは URL をロケーション ブロックと一致しない別のロケーションに書き換えるので、ループする可能性もありません。

于 2012-12-18T07:39:17.677 に答える
0

うまくいかない理由は2つあります。まず、書き換えルールが正しくありません。次のように変更します。

rewrite ^/pages/(.*).html$ /show_page.php?name=$1? last;

location ~ \.phpそして2つ目は、このように書き換えると、ブロックに到達しないため、nginxがphpファイルを処理する方法がわからないことです。これを修正するには、完全location ~ \.phpなものを php.conf という名前の別のファイル (または好きなもの) に置き、これをサーバー ブロックの必要な場所に含めます。

これはおそらく次のようになります。

server {
    # you config here (servername, port, etc.)

    location /pages {
        rewrite ^/pages/(.*).html$ /show_page.php?name=$1? last;
        include php.conf;
    } 

    # instead of the php location block also just add the include
    include php.conf;
}
于 2012-12-16T23:19:03.980 に答える