沉冰浮水

沉冰浮水

做最终到的事,成为最终成为的人!
github
bilibili
mastodon
zhihu
douban

「ノート」.htaccessおよびnginx.confの使用可能な変数の一覧

自分の検索能力は低くないはずなのに、多くの情報をすぐに見つけることができず、まだ悩んでいます。

.htaccessnginx.conf説明
%{REQUEST_SCHEME}$schemehttp /https
%{HTTP_HOST}$hostドメイン /ip
%{REQUEST_URI}$request_urihost/ の後ろの部分
%{REQUEST_FILENAME}$request_filename一般的には uri と同じ?
%{QUERY_STRING}$argsクエリ文字列(?の後ろの部分)
%{HTTP_USER_AGENT}$http_user_agentクライアントの UA
%{REMOTE_ADDR}$remote_addrアクセス元 IP

$scheme://$host/または%{REQUEST_SCHEME}://%{HTTP_HOST}/を使用して現在の URL を直接結合できます。


mod_rewrite 参考文書_Apache 中文文書:

https://www.apachehttpd.com/mod/mod_rewrite.html

Htaccess - THE Ultimate .htaccess tutorial with 100's of Examples:

https://www.askapache.com/htaccess/#Htaccess_Variables


一.正規表現の一致、以下のようになります:

  • ~ 大文字と小文字を区別する一致;
  • ~* 大文字と小文字を区別しない一致;
  • !~ および !~* 大文字と小文字を区別しない不一致;

二.ファイルおよびディレクトリの一致、以下のようになります:

  • -f および !-f ファイルの存在を判断するために使用されます;
  • -d および !-d ディレクトリの存在を判断するために使用されます;
  • -e および !-e ファイルまたはディレクトリの存在を判断するために使用されます;
  • -x および !-x ファイルが実行可能かどうかを判断するために使用されます;

三.rewrite ディレクティブの最後のパラメータはフラグマークで、フラグマークは次のようになります:

  • last 書き換え後の URI に新しいリクエストを発行し、最終的な効果は新しいリクエストが別のルールに一致するかどうかによって異なります。「おそらく apache の[L]マークに相当する」
  • break 現在のディレクティブで指定された新しい URI が最終結果です;
  • redirect 302 一時リダイレクトを返し、ブラウザのアドレスバーにはリダイレクト後の URL が表示されます;
  • permanent 301 永久リダイレクトを返し、ブラウザのアドレスバーにはリダイレクト後の URL が表示されます;

2022 年になって初めて、Nginx の設定では「および」「または」演算子などを直接使用できないことを知りました。

# アクセス元IPを表示するためのテスト用
location ~* ^/ip/[\d-]+ {
    # default_typeはif内で使用できません
    default_type    text/plain;
    return 200      "${remote_addr}";
}

# 特定のパスに一致する場合
# if ($uri ~* ^/SomePath) {
    # ………………
# }

# -----------------

# デフォルトは0
set $pass 0;

# いずれかの条件が一致した場合、$passを1に設定します;
# 「または」演算子と同等です;

# UAを判断
if ($http_user_agent ~* Edg/\d+) {
    set $pass 1;
}

# IPを判断
if ($remote_addr ~* 172.*) {
    set $pass 1;
}

# 1でない場合はアクセスを拒否
if ($pass != 1) {
    return 403;
}

# -----------------

set $flag 0;

# すべての条件を満たす必要があります
# 「かつ」演算子と同等です;

# UAを判断
if ($http_user_agent ~* Edg/\d+) {
    set $flag "${flag}1";
}

# IPを判断
if ($remote_addr ~* 172.*) {
    set $flag "${flag}1";
}

# 結果が一致しない場合はアクセスを拒否
if ($flag != "011") {
    return 403;
}


Nginx で検索エンジンまたは指定された IP のみを許可する方法:

# 沈氷浮水(wdssmq)
location / {
    set $pass 0;
    # UAを判断
    if ($http_user_agent ~* (Baiduspider|YisouSpider|360Spider|HaosouSpider|bingbot|Sosospider|Sosoimagespider|Bytespider|Sogou web spider|Sogou inst spider|Sogou News Spider|Sogou Pic Spider|Sogou Video Spider|Googlebot|Googlebot-Image|AdsBot-Google-Mobile)) {
        set $pass 1;
    }
    # IPを判断
    if ($remote_addr ~* (123.123.123.123|192.168.0.\d+)) {
        set $pass 1;
    }
    # 1でない場合はアクセスを拒否
    if ($pass != 1) {
        return 403;
    }
    # 他のルール、仮想静的など
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。