Apache HTTPd mod_rewrite ルールのほとんどを nginx の HttpRewrite モジュール (すべての動的要求で FastCGI を介して PHP-FPM を呼び出す) に変換しました。ハードロケーションで定義された単純なルールはうまく機能します:
location = /favicon.ico { rewrite ^(.*)$ /_core/frontend.php?type=ico&file=include__favicon last; }
このように mod_rewrite で解析される正規表現にまだ問題があります (ルール内で末尾のスラッシュを受け入れ、すべてのリクエストにクエリ文字列を追加していることに注意してください):
mod_rewrite
# File handler
RewriteRule ^([a-z0-9-_,+=]+)\.([a-z]+)$ _core/frontend.php?type=$2&file=$1 [QSA,L]
# Page handler
RewriteRule ^([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1/$2 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1/$2 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1/$2/$3 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1/$2/$3 [QSA,L]
サイトの次のサーバー構成を考え出しましたが、リクエストを解析した後、一致しないルールに遭遇しました (例:; GET /user/auth
):
nginxの書き換えを試みた
location / {
# File handler
rewrite ^([a-z0-9-_,+=]+)\.([a-z]+)?(.*)$ /_core/frontend.php?type=$2&file=$1&$3 break;
# Page handler
rewrite ^([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1&$2 break;
rewrite ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1/$2&$3 break;
rewrite ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1/$2/$3&$4 break;
}
filename.ext
ファイル ハンドラー (単に) とページ ハンドラー (スラッシュで定義された最大 3 つのプロパティを持つ一意のルート リクエスト)を処理するために何を提案しますか?
これからまだ応答が得られていないため、location ~ \.php {}
これらの書き換えルールの前に含まれている で定義されている PHP パーサーをオーバーライドするかどうかもわかりません。
ルート プロパティの数ごとに新しいルールを使用する必要なく、解析の問題を解決できればボーナス ポイントです。