Apache-2.2

使文件可由 PHP 訪問,但不能從外部訪問

  • January 15, 2012

我的主人給了我兩個文件夾供我使用,一個/home/public/是頁面所在的位置,一個/home/private/是我個人使用的。我希望 PHP 創建一個我可以從機器上讀取的文件,但其他任何人都不能通過 Internet 讀取。在公用文件夾中製作文件會導致此問題。我考慮過讓 apache 組擁有該文件,但我不是其中的成員。如果我可以將文件放在我的私人目錄中會很好,但可以理解的是,在嘗試寫入其中的文件時出現訪問錯誤。我該怎麼辦?

許多包需要 html 或公共層次結構中的程序/腳本可訪問子目錄。

由於您(我假設)使用 suPHP 或 equiv 在共享服務上執行,這只會在所有者 UID 中執行腳本,因此不可用。我採用了一個非常簡單的約定:如果任何文件或文件夾名稱以 _ 或 . 然後禁止通過 URI 訪問。這是一個簡單的規則,我將它放在任何.htaccess文件中

SetEnvIf Request_URI "(^_|/_|^\.|/\.)" forbidden
<Files *>
    Order allow,deny
    Allow from all
    Deny from env=forbidden
</Files> 

另一種方法是使用 RewriteRule:

RewriteRule (^_|/_|^\.|/\.)            -                  [forbidden]

這樣做的好處是,您可以對您可能希望在腳本中訪問但希望通過 URI 瀏覽它們的任何包含或數據目錄採用這種極其簡單的約定。

腳註

我對你的說法有點困惑:

如果我可以將文件放在我的私人目錄中會很好,但可以理解的是,在嘗試寫入其中的文件時出現訪問錯誤。

這是服務提供商的 UID 擁有 /home/private/ 並且您只能通過您的 GID 讀取訪問權限的這些有趣的事情之一嗎?我的 ISP 做同樣的事情來轉儲日誌文件之類的東西。我可以讀但不能寫或刪除。這就是我使用/public/_private. 對不起,矛盾的說法。

引用自:https://serverfault.com/questions/350096