我的目標如下:當用戶嘗試訪問影像(或 /wp-content/uploads/ 中的任何其他附件)時,我需要將他重定向到一個處理器 PHP 檔案,該檔案將檢查用戶是否已登錄以及該檔案由該用戶上傳。
到目前為止,我已經找到了這個解決方案:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*wp-content/uploads/.*
RewriteRule ^wp-content/uploads/(.*)$ file-processor.php?file=$1 [QSA,L]
</IfModule>
它只是不起作用。?? 我嘗試了大量不同的組合,但沒有成功。然后我決定嘗試一些更簡單的方法,發現我什至無法通過以下代碼重定向直接訪問的影像(雖然它適用于網站的任何其他頁面):
Redirect 301 / https://example.com/
這部分真的很令人困惑......是否應該對直接訪問的檔案進行一些不同的處理?
要說清楚。使用最后一個代碼,我得到了以下行為:
- 如果我嘗試訪問網站上的任何頁面(例如:“siteurl.com”或“siteurl.com/about”),那么我會按預期重定向到“https://example.com/”。
- 如果我嘗試訪問媒體“siteurl.com/wp-content/uploads/2021/10/someimg.jpg”,那么我可以訪問該媒體并查看它,而我仍然希望被重定向到“https://example .com”,但我沒有得到任何重定向。
從我的主題直接訪問的檔案也會發生同樣的問題。盡管 .htaccess 中有最后一條重定向規則,但我仍然可以訪問它們:
Redirect 301 / https://example.com/
你能解釋一下如何重定向直接訪問的檔案嗎?提前致謝!??
uj5u.com熱心網友回復:
聽起來您可能支持一個旨在為您的靜態內容提供服務的前端代理。(Nginx 通常用于此。)代理提供靜態內容,完全繞過您的應用程式服務器 (Apache / .htaccess)。這以犧牲某些功能為代價提供了出色的性能。
請求這些影像之一時檢查 HTTP 回應標頭。通過檢查ServerHTTP 回應標頭,您可能會了解正在發生的事情。
可能的解決方案是:
- 在前端代理中破例排除
/wp-content/uploads目錄。
或者
通過與實際檔案系統路徑不同的 URL 參考這些影像/資源。
由于您想要“保護”這些資源,您需要將它們存盤在公共 HTML 空間之外(即檔案根目錄上方) - 因此它們無法通過代理訪問。然后,您可以根據需要使用相同的 URL(即
/wp-content/uploads/...),但腳本 (file-processor.php) 將從該替代位置讀取檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316604.html
標籤:php WordPress的 .htaccess 重定向 服务器
