1

PHP MVCスタイルのルーターは通常、次のような要求を処理しindex.php?route=one/two/three...ます。スラッシュで区切られたクエリ文字列は、システムがたどるルートを示します(フォルダー>ファイル>関数、または会社>部門>手順>アクションなど)。

リクエストの例は次のとおりです。

GET http://localdomain/user/profile/modify
  > /index.php?route=user/profile/modify
    > /user/profile.php
      > modify()

このすべてを念頭に置いて、nginxサーバー構成を次のように記述しました。

set $i /index.php;
location ~ ^/([a-z0-9-]*)$                             { rewrite ^/([a-z0-9-]*)$                             $i?route=$1       last; }
location ~ ^/([a-z0-9-]*)/?([a-z0-9-]*)$               { rewrite ^/([a-z0-9-]*)/?([a-z0-9-]*)$               $i?route=$1/$2    last; }
location ~ ^/([a-z0-9-]*)/?([a-z0-9-]*)/?([a-z0-9-]*)$ { rewrite ^/([a-z0-9-]*)/?([a-z0-9-]*)/?([a-z0-9-]*)$ $i?route=$1/$2/$3 last; }

正規表現のベストプラクティスは、これを1つ以上の引数を処理できる単一の行に変更するように私に叫んでいます(おそらくリピーターを使用することによって)。私の正規表現の知識は限られていますが、どうすればよいですか?

4

1 に答える 1

1

これにより、文字グループにスラッシュを追加することでindex.php?route= 、フォルダー構造の長さに関係なく、要求が送信されます。

location ~ ^/([a-z0-9\/-]*)$ { rewrite ^/([a-z0-9\/-]*)$ $i?route=$1 last; }

それは基本的にフォルダタイプのリクエストで動作し、ドットのあるもの(例.php .htmlなど)では起動しないのでindex.php、他のものは安全です。

于 2013-01-10T12:25:20.457 に答える