
WordPress 上傳的圖片與檔案,預設都存在 wp-content/uploads/年/月/ 資料夾裡。很久以前,「設定 → 媒體」有兩個欄位可以修改上傳的資料夾與網址,但這兩個欄位已經從後台移除,只有以前曾經設定過的網站才會看到。
這篇舊版教的是進入隱藏的 /wp-admin/options.php 頁面,修改 upload_path 與 upload_url_path。這個頁面列出網站所有的底層設定,改錯一個值就可能讓網站無法運作,不建議再使用。下面整理現在比較穩當的做法,以及改路徑之前一定要知道的風險。
先想清楚:真的需要改嗎?
更改上傳路徑最大的麻煩是已經上傳的圖片(下面會詳細說明)。很多想改路徑的理由,其實有更簡單的解法:
- 想把圖片放到子網域來加速:以前的網站會把圖片放在另一個網域,讓瀏覽器同時下載更多檔案。現在的網站普遍使用 HTTP/2,一個連線就能同時傳很多檔案,這招已經沒有幫助。想用 CDN 加速,大多是由 CDN 服務或外掛自動改寫圖片網址,不需要搬動檔案。
- 想讓圖片網址短一點:對 SEO 幾乎沒有影響,圖片的檔名與替代文字(alt)比資料夾路徑重要。
- 想整理圖片:可以用媒體庫分類,比改資料夾更有彈性。
如果還是需要改(例如新網站要沿用舊系統的圖片路徑),再往下看。
方法一:在 wp-config.php 定義 UPLOADS(最簡單)
用 FTP 或主機的檔案管理員,打開網站根目錄的 wp-config.php,在「That's all, stop editing!」那一行的上面加入:
define( 'UPLOADS', 'media' );- 路徑是相對於 WordPress 的安裝資料夾,前後都不要加斜線。
- 以上面的例子來說,之後上傳的檔案會存到網站根目錄的
media/年/月/,網址變成https://你的網址/media/年/月/檔名.jpg。 - 資料夾不存在時,WordPress 會自動建立,前提是主機的權限允許寫入。
- WordPress 如果是裝在子資料夾(例如網址是
example.com/wp/),新資料夾也會在那個子資料夾底下。
方法二:用 upload_dir 篩選器(放到其他資料夾或網址)
UPLOADS 只能指定 WordPress 安裝資料夾底下的位置。要放到其他地方,例如已經設定好的子網域資料夾,要用 upload_dir 篩選器。
這段程式碼建議做成 must-use 外掛:在 wp-content 裡建立 mu-plugins 資料夾(沒有就新增),放入一個 custom-upload-dir.php 檔案。放在這裡的程式會自動執行、不能從後台停用,換主題也不會失效:
<?php
/**
* Plugin Name: 自訂上傳路徑
*/
add_filter( 'upload_dir', function ( $uploads ) {
$uploads['basedir'] = '/home/帳號/public_html/img'; // 主機上的完整路徑
$uploads['baseurl'] = 'https://img.example.com'; // 這個資料夾對應的網址
$uploads['path'] = $uploads['basedir'] . $uploads['subdir'];
$uploads['url'] = $uploads['baseurl'] . $uploads['subdir'];
return $uploads;
} );basedir要填主機上的完整路徑。不確定的話,可以到「工具 → 網站健康狀態 → 資訊」,在目錄相關的區塊參考目前 WordPress 與上傳資料夾的實際位置。baseurl的網址必須真的能打開這個資料夾,子網域要先在主機設定好,並且裝好 SSL 憑證。- 這種寫死完整路徑的做法,網站搬家或換主機時路徑會改變,要記得一起修改。
最大的風險:舊圖片會破圖
這是改上傳路徑最容易忽略的地方。WordPress 在資料庫記錄每張圖片時,存的是相對路徑(例如 2024/05/photo.jpg),顯示時再接上「目前設定的」上傳網址。所以改了路徑之後:
- 媒體庫、特色圖片:會用新的路徑去找舊圖片,檔案沒搬過去就會破圖。
- 文章內文裡的圖片:網址是寫死在內文裡的舊路徑,檔案還在就不會壞,但舊資料夾就不能刪。
所以已經有圖片的網站,改路徑要照這個順序:
- 完整備份資料庫與網站檔案。
- 設定新的路徑(方法一或方法二)。
- 把
wp-content/uploads裡的所有檔案複製到新資料夾,保留原本的年/月資料夾結構。 - 用 Better Search Replace 之類的外掛,把資料庫裡的舊網址(例如
https://example.com/wp-content/uploads/)取代成新網址。先用試執行(dry run)確認會改到哪些資料,再正式執行。 - 檢查媒體庫、特色圖片、文章圖片,以及用頁面編輯器做的頁面,並清除快取外掛與 CDN 的快取。
- 確認都正常之後,在網站根目錄的
.htaccess加上轉址,讓外部網站與 Google 圖片搜尋的舊網址也能找到新位置,最後才刪除舊資料夾:
RedirectMatch 301 ^/wp-content/uploads/(.*)$ /media/$1把 /media/ 換成你的新路徑,這行要放在 # BEGIN WordPress 的上面。
其他要注意的地方
- 外掛相容性:備份、圖片壓縮、安全性、CDN 這類外掛,有些會假設圖片放在
wp-content/uploads,改完之後要檢查它們的設定與運作。 - 新資料夾一樣要防護:上傳資料夾不應該能執行 PHP,做法請看WordPress 限制上傳檔案類型裡的說明。
- 多站台(Multisite)網站的上傳路徑規則不同,不適用這篇的做法。
如果以前用 options.php 改過
以前照舊方法改過 upload_path 或 upload_url_path 的網站,「設定 → 媒體」會重新出現這兩個欄位。想改回預設,把兩個欄位都清空後儲存;但這樣一樣會遇到上面說的舊圖片問題,要先把檔案搬回 wp-content/uploads,並替換資料庫裡的網址。
只是不想要「年/月」資料夾?
到「設定 → 媒體」,取消勾選依年份與月份分類上傳檔案的選項即可,只會影響之後上傳的檔案。不過所有檔案都放在同一個資料夾,檔案一多,用 FTP 瀏覽會變得很慢,大部分網站維持預設就好。
延伸閱讀
- WordPress 媒體庫分類:不用外掛,用 register_taxonomy 替圖片加上獨立分類
- WordPress 限制上傳檔案類型:upload_mimes 寫法與 JPG、PNG、WebP、SVG 格式選擇
- .htaccess 用法大全:轉址、HTTPS、安全防護、壓縮與快取常用設定(WordPress 適用)
搬家、改路徑這類動到整站圖片的工作,一個步驟沒做好就會到處破圖。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供網站維護託管,服務台北與全台客戶,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。