11

htaccess の if-else 文について誰か助けてほしいです。私が望むのは、クッキーを読み取り、その値が定義された値と等しいかどうかを確認するための htaccess です。false と評価された場合は、リダイレクトを実行し、要求されたフォルダーへのアクセスを防止する必要があります。評価が false を返す場合は、すべて拒否する方がよいでしょう。

次のコードは、名前付きの Cookie 値が設定されているかどうかを確認することを知っています。設定されていない場合は、その下の書き換えルールが実行されます。しかし、この行を調整して、特定の値に等しいかどうかを確認するにはどうすればよいでしょうか?

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^.*cookie_name.*$ [NC]
RewriteRule .* http://www.google.com [NC,L]

私が望むものは、.htaccess スタイルで:

if ($_COOKIE['cookie_name'] != 'specific_value'){
//rewrite_rule or deny from all.
}
4

4 に答える 4

18

あなたは近くにいます。Cookie 文字列には次のものが必要=です。

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !cookie_name=specific_value; [NC]
RewriteRule ^ http://www.google.com [NC,L]
于 2013-10-15T13:19:19.010 に答える
8

required_value一致させる必要がある値に置き換えます。

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !cookie_name=required_value;? [NC]
RewriteRule ^ http://www.google.com [R=301,L]

;?複数の Cookie 値のペアがある場合、またはcookie_nameが唯一の Cookie セットである場合の両方で一致が発生することを確認します。これにより、 (部分文字列)offのみでの一致が必要な場合のように、Cookie 値での一致も防止されます。of

于 2013-10-15T13:20:01.873 に答える
0

%{HTTP_COOKIE} 文字列は、セミコロンで区切られた一連のエスケープされた名前と値のペアのように見え、各セミコロンの後にスペースが続きます。MDNから:

構文

Cookie: <cookie-list>
Cookie: name=value
Cookie: name=value; name2=value2; name3=value3

<クッキーリスト>

  • = 形式の名前と値のペアのリスト。リスト内のペアは、セミコロンとスペース (';') で区切られています。

Cookie: PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1

したがって、正規表現では、次のように、オプションでセミコロンの後にスペースを入れ、最後にセミコロンを一致させる必要があります。

RewriteCond %{HTTP_COOKIE} "!(?:^|; )cookie_name=specific_value(?:;|$)"

注: set-cookie 関数が異なれば、エスケープされる文字も異なります。したがって、ある関数は @ 記号をエスケープするかもしれませんが、別の関数は Cookie 文字列の外観に矛盾を引き起こさないかもしれません。たとえば、userremail%40gmail.com として保存されている場合、userremail@gmail.com の検索は失敗する可能性があります。どちらも有効です。

于 2020-10-24T14:54:15.837 に答える