我想阻止直接訪問某個目錄中的圖片,因此我試圖在用戶試圖直接訪問圖片時將其重定向到另一個頁面。
這是我想阻止直接訪問的目錄:
www.example. com/assets/images/user-uploads/image.jpg這是我想要重定向到的目錄:
www.example.com/no-direct-access這里是我的
.htaccess代碼:
這是我們的目錄。
RewriteEngine On
RewriteCond %{REQUEST_URI} /assets/images/user-uploads/(. ) [NC]
RewriteRule ^(.*)$ index.php/no-direct-access [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$index.php/$1 [L]
當我撥打www.example.com/assets/images/user-uploads/image.jpg時,它給了我404錯誤。
請幫助我解決這個問題。
uj5u.com熱心網友回復:
直接是指我不希望任何人查看躺在用戶上傳的目錄中的圖片。如果有人使用類似www.sitename.com/assets/images/user-uploads/image.jpg的網址撥號查看上述目錄中的任何圖片,而不是在瀏覽器中打開圖片檔案,他們應該被重定向到禁止直接訪問頁面。如果上述圖片是任何檔案(php或html)的一部分,那么渲染圖片是可以的。
你最初的方法的問題是,它將阻止每一個客戶端請求。任何屬于 "任何檔案(php或HTML)的一部分 "的影像也將被阻止。
為了只阻止 "直接請求"(即當用戶在瀏覽器中直接輸入URL時),你可以檢查Referer HTTP請求頭。這在直接請求中是空的,而在其他情況下則設定為referring URL(即鏈接被點擊的頁面)。
然而,這是不可靠的。用戶可以將他們的瀏覽器配置為不發送Refer頭(因此這些用戶將被阻止)。搜索引擎機器人不會發送Refer頭(如果這是個問題的話)。而對于一個惡作劇的用戶來說,偽造Refer以獲得訪問權是微不足道的。
"重定向 "的另一個 "問題 "是,用戶會收到一個 3xx HTTP 回應代碼,表明該資源已經 "移動",而不是無法訪問。然而,通過你的 "嘗試",你正在內部重寫請求,所以(如果成功的話)這將回傳一個 200 OK 狀態(除非你手動覆寫這個)。
最好是回傳 403 Forbidden,也許可以將 /no-direct-access 作為自定義 403 錯誤檔案。
例如,請嘗試以下做法:
ErrorDocument 403 /index.php/no-direct-access
重寫引擎開啟
# 阻止對 "user-uploads "目錄的直接訪問。
RewriteCond %{HTTP_REFERER}! !^https?://(www.)? example.com/
RewriteRule ^assets/images/user-uploads/ - [NC,F]
# CI front-controller。
RewriteCond %{REQUEST_FILENAME}! !-f
RewriteCond %{REQUEST_FILENAME}! !-d
RewriteRule (.*) index.php/$1 [L] 。
其中example.com是你網站的域名。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311030.html
標籤:
