1. Nginx 書き換えルール関連の手順
Nginx Rewrite ルールに関連する命令には、if、rewrite、set、return、break などが含まれますが、その中で rewrite は最も重要な命令です。単純な Nginx Rewrite ルールの構文は次のとおりです:
^/b/(.*).html /play.php?video=$1 Break;を書き換えます
if ステートメントを追加する場合の例は次のとおりです:
if (!-f $request_filename)
{ ^/img/(.*)$ /site/$host/images/$1 最後に書き換えます }
2. Nginx と Apache の Rewrite ルールの例の比較
単純な Nginx と Apache の書き換えルールには大きな違いはなく、基本的に完全な互換性があります。
Apache 書き換えルール:
RewriteRule ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 [L]
RewriteRule ^/ceshi/$ /zl/ceshi.php [L]
RewriteRule ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 [L] RewriteRule ^/pingce([0-9]*)/$ / zl/pingce.php?id=$1 [L]
Nginx 書き換えルール:
^/(mianshi|xianjing)/$ /zl/index.php?name=$1 last;
を書き換えます^/ceshi/$ /zl/ceshi.php を最後に書き換えます;
書き換え ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 last;
^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 last;
を書き換えます
Apache の書き換えルールを Nginx の書き換えルールに変更するのは非常に簡単です。ルールを変更した後、「nginx -t」コマンドを使用して、nginx.conf 設定ファイルに構文エラーがあることを確認します。次に、条件に引用符を追加してみてください。たとえば、次の Nginx Rewrite ルールは構文エラーを報告します:
^/([0-9]{5}).html$ /x.jsp?id=$1 最後に書き直すと、正しくなります:
「^/([0-9]{5}).html$」/x.jsp?id=$1 last;
を書き換えます
URL ジャンプ時の Apache と Nginx の書き換えルールには微妙な違いがあります:
Apache 書き換えルール:
RewriteRule ^/html/tagindex/([a-zA-Z]+)/.*$ /$1/ [R=301,L]
Nginx 書き換えルール:
^/html/tagindex/([a-zA-Z]+)/.*$ http://$host/$1/ Permanent;
を書き換えます
上記の例では、Nginx で必要な Nginx Rewrite ルールの置換文字列に「http://$host」が追加されていることがわかりました。
さらに、Apache と Nginx の Rewrite ルールは変数名も異なります。例:
Apache Rewrite ルール:
RewriteRule ^/user/login/$ /user/login.php?login=1&forward=http://%{HTTP_HOST} [L]
Nginx 書き換えルール:
^/user/login/$ /user/login.php?login=1&forward=http://$host last;
Apache と Nginx 間での同じまたは類似の機能を持つ一部の命令とタグ間の対応関係書き換えルール:
Apache のRewriteCond 命令は Nginx の if 命令に対応し、
Apache の RewriteRule 命令は Nginx のリダイレクト タグに対応し、
Apache の [P] タグは Nginx の最後のタグに対応します。 ] マークは Nginx のリダイレクト マークに対応し、
Apache の [P,L] マークは Nginx の最後のマークに対応します。
指定されたドメイン名はこのサイトへのアクセスを許可され、他のドメイン名は http://www.aaa.com にジャンプします:
RewriteCond %{HTTP_HOST} ^(.*?).domain.com$
RewriteCond %{HTTP_HOST} !^qita.domain.com$ RewriteCond %{DOCUMENT_ROOT}/market/%1/index.htm -f
RewriteRule ^/wu/$ /market/%1/index.htm [L]
Nginx の if 命令はネストをサポートしておらず、AND や OR などの複数条件の一致もサポートしていないようです。Apache の RewriteCond と比較すると、面倒ですが、次のページで Nginx 構成を記述することでこの例を実装できます:
Nginx 書き換えルール:
if ($host ~* ^(.*?).domain.com$)
{
$var_wupin_city $1 を設定します
$var_wupin '1' を設定します
}
if ($host ~* ^qita.domain.com$)
{
$var_wupin ‘0’ を設定します
}
if (!-f $document_root/market/$var_wupin_city/index.htm)
{
$var_wupin ‘0’ を設定します
}
if($var_wupin ~ ‘1’)
{
^/wu/$ /market/$var_wupin_city/index.htm を最後に書き換えます
}
http://www.bkjia.com/PHPjc/326583.html
www.bkjia.com