Apache-2.2

Apache - 403 禁止訪問某些靜態文件

  • February 5, 2022

我很難使用 .htaccess 指令。我正在嘗試為 Codeigniter 框架重寫 URL。

生產伺服器上的一切都按預期工作,但我無法正確設置自己的測試伺服器。

測試伺服器

URL 重寫效果很好,php 文件按預期呈現,但通過 HTML(css、js、img)包含的所有文件都不會顯示,因為它們無法訪問,原因是:

403 Forbidden
You don't have permission to access /path/to/file/plugins-min.css
on this server.

這是我的 .htaccess 文件:

RewriteEngine On

# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# For requests that are not actual files or directories,
# Rewrite to index.php/URL
RewriteRule ^(.*)$ index.php/$1 [PT,L]

這是我的文件文件夾的 Apache2 配置:

<Directory /document/folder/>
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
   AllowOverride All
   Order deny,allow
   Allow from all
</Directory>

當我設置AllowOverrideNone(即不重寫 URL)時,靜態文件會正確顯示。

當通過腳本上傳圖像時,即使它們與其他不可訪問的文件具有相同的權限/所有者/組,它們也會顯示在頁面上。

網站上的所有內容都具有相同的權限和所有者。

我認為我的 Apache 配置有一些東西會阻止“包含的 HTML ”文件被訪問,正如 Apache 錯誤日誌所說:

[Wed Aug 17 22:29:24 2011] [error] [client <MY IP>] client denied by server
configuration: /var/www/site.com/application/assets/js/admin.js, 
referer: http://<MY IP>/site.com/page/edit/

提前致謝

使用 AllowOverride All 在上面您正在工作的其他目錄中查找 .htaccess 文件時,這很常見,這會影響您的配置。根據發布此答案的評論執行緒來收集賞金。這是一個範例查找命令:

找到DocumentRoot -name .htacccess -print

將列印任何其他 .htaccess 文件。

查找所有.htaccess文件:

find /var/www/ -name .htaccess

作為臨時更改:

Order deny,allow
Allow from all

到:

Order allow,deny
Allow from all

確保Deny之前沒有處理任何規則。

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