2016-09-28 3 views
1

正規表現が嫌いです!私の脳は、正規表現のようには機能しません。誰かが私が解決しようとしている次の問題で助けてもらえますか?しかし正規表現: '/'にマッチ'/ _local /'という接頭辞が付いていない場合に限ります。

location ~ \/\. { 
    access_log off; 
    log_not_found off; 
    deny all; 
} 

、この:場所以下の設定

私は現在、セキュリティ上の理由からアクセスシステムや隠しファイルへのすべての試みを阻止するnginxの設定ファイル持っている(で始まるすなわち、ファイルを「」)私のCouchDBサーバー要求をブロックするexample.com/db/_local/.XYZ

すべての要求をX/_local/.Xに許可したいが、他のすべての要求はX/.Xに拒否したい。

したがって、私の正規表現はすべて/.に一致する必要がありますが、/_local/.には一致しません。

例:

example.com/.secretfile   // deny 
example.com/db/_local/.LONGHASH // allow 
example.com/other/.other   // deny 

は誰正規表現の達人は、助けてくださいことはできますか?

答えて

2

がNgninxが完全にPCRE互換性があることを想定、これは解決する必要があります:

location ~ (?<!\/_local)\/\. { 

これは「ネガティブ表情ビハインドアサーション」を使用しています:(?<!\/_local)は「/_localで始まるない」を意味します。

編集:が前方エスケープあなたがチャンピオン

+0

素晴らしい仕事をスラッシュ!スラッシュをエスケープして機能させるには、少し修正を加えなければなりませんでした。実用的な解決策であなたの答えを更新しました。再度、感謝します! –

関連する問題