2016-06-18 79 views
1

我試圖使用.htpasswd來保護我的域上的/ admin /部分。使用.htpasswd密碼保護Nginx中的文件夾中的文件

我能夠成功地保護使用這種配置根index.php文件:

location /admin/ { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

但該文件夾中的相關文件仍然可見。例如,在http://domain.com/admin/whatever.php - 加載頁面時,Nginx密碼驗證會出現,但您可以簡單地取消它並仍然查看該頁面。

經過一番研究,我試圖使用regex wildcards失敗。

Doesn't work:

location "~^/admin/.$" { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

Doesn't work:

location "~^/admin/*\$" { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

我如何密碼保護雙方的根本指標,以及所有子文件夾和文件呢?過去/ admin /應該無法訪問。

+1

你試過'「〜^/admin /.*」'? – SztupY

+0

工作,謝謝!你是怎麼知道這個語法的? – some1

回答

5

你的正則表達式語法幾乎是很好的,你居然要你做的兩次嘗試混合:

location "~^/admin/.*" { 
     try_files $uri $uri/ =404; 
     auth_basic "Restricted"; 
     auth_basic_user_file /etc/nginx/.htpasswd; 
} 

這是因爲在正則表達式語法.指任何字符(單個),以及*指前一個「東西」的數量(可以是零)。混合這兩個(.*)將意味着任何字符的數量。

這是正則表達式的基礎知識之一,所以我建議您多瞭解一些關於它們的知識。 Learning Regular Expressions包含關於您的下一步可能的指南。它還包含有關處理換行符時.通配符的一些限制的註釋,儘管這不適用於URL。