web-dev-qa-db-ja.com

nginx urlの書き換え。わからない

OK、URLの例は

http://www.mysite.com/?p=account&view=settings

p uriは定数です。すべてのURLにそれがあります。

viewは、多くのオプションのURIの1つです。

私はURLの書き換えと正規表現を理解しようとしましたが、私はそれを理解していません。コードの記述に戻る必要がありますが、残念ながらnginx.confに戻ってきて罰せられます。

私の目標は、URLを次のように書き換えることです。

http://www.mysite.com/account/view/settings

私が試したものをお見せしますが、これは前の例の多くをコピーして貼り付けたものであり、正規表現とURL書き換えの概念を理解することにどれほど哀れであるかを証明しています。

誰かが正規表現の部分を説明するのに数分かかるか、それを理解するための優れたチュートリアルに私をリンクできるとしたら、私は感謝します。

いいえ、私はあなたが私のために仕事をすることを期待していませんが、書き換えの概念とnginx confで使用する変数を理解するために少しの助けをお願いします。 1つは$uriと呼ばれていることがわかりますが、その意味がわかりません。また、/socketおよび/privateのphpスクリプトへの直接アクセスを拒否するために正規表現を追加する必要がありますが、ajaxを介したアクセスは許可します。私はおそらく正規表現について学んだあらゆる知識をそのタスクに適用できると確信しています。

私のnginx confのロケーションブロック

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
location ~* .(png|gif|ico|css|js)$ {
    expires 365d;
}   
location ~ .(aspx|jsp|cgi)$ {
    return 410;
}
location /socket {
    return 405;
}
location /private {
    return 405;
}   
location / {
    # include /etc/nginx/naxsi.rules;
    index index.php;
    try_files    $uri $uri/ /index.php?q=$uri?;
    limit_req zone=one burst=5;
}

location /Denied {
    return 418;
}
error_page 500 /error.php?type=500;
error_page 501 /error.php?type=501;
error_page 502 /error.php?type=502;
error_page 503 /error.php?type=503;
error_page 400 /error.php?type=400;
error_page 401 /error.php?type=401;
error_page 403 /error.php?type=403;
error_page 404 /error.php?type=404;
error_page 405 /error.php?type=405;
error_page 406 /error.php?type=406;
error_page 413 /error.php?type=413;
error_page 414 /error.php?type=414;
error_page 418 /error.php?type=418;
7
r3wt

私はこのウェブサイトがあなたを大いに助けるかもしれないと信じています:

http://regex101.com/r/uP4nT1

8
Vasili Syrakis

あなたは必要です

location /yourlocations {
   if ($args ~* "p=[a-z]*&view=[a-z]*") {
        rewrite ^ http://yourwebsite.com/$arg_p/$arg_view? last;
        }

}

また、「ビュー」をキャプチャしたい場合は、そのビューを次のような引数にするプログラムを作成する必要があります。

location /yourlocations {
       if ($args ~* "p=[a-z]*&second=[a-z]*&third=[a-z]*") {
            rewrite ^ http://yourwebsite.com/$arg_p/$arg_second/$arg_third? last;
       }

}
1
timmeyh