WooCommerce downloads not working
If WooCommerce downloadable product files are not working after offloading to cloud storage, the cause depends on which storage provider you are using and which WooCommerce download method is configured. Work through the checks below.
Check 1: Is the file offloaded?#
Go to Media > Library and find the downloadable file. Click on it and check the URL in the attachment details panel. If it still shows your site URL rather than your cloud storage or CDN hostname, the file has not been offloaded. Run the bulk migration tool to offload existing files, or re-upload the file to trigger automatic offloading.
WooCommerce downloadable files must be in cloud storage for WP Media Cloud to generate a signed or CDN URL for the download link.
Check 2: Which download method is WooCommerce using?#
Go to WooCommerce > Settings > Products > Downloadable Products and check the Download Method setting. WooCommerce has three options:
- Redirect — sends the customer to the file URL directly. WP Media Cloud intercepts this for offloaded files and replaces the URL with a signed URL if secure downloads is enabled, or a plain CDN URL if not.
- Force Download — attempts to stream the file through PHP from disk. WP Media Cloud intercepts this for offloaded files and converts it to a signed redirect instead.
- X-Accel Redirect — uses Nginx’s X-Accel-Redirect header to serve the file from disk. WP Media Cloud intercepts this for offloaded files and converts it to a signed redirect instead.
WP Media Cloud handles all three methods for offloaded files. If the download is failing with Force Download or X-Accel, confirm the file has been offloaded and that WP Media Cloud has detected it as an offloaded file.
Check 3: Is secure downloads enabled and configured correctly?#
If secure downloads is enabled in WP Media Cloud settings, signed URLs are generated for download links. Signed URLs are only supported on Bunny Edge Storage and Cloudflare R2. If you are on a different provider with secure downloads enabled, WP Media Cloud falls back to the plain CDN URL.
For Bunny Edge Storage:
Go to WP Media Cloud > Settings and confirm the Bunny Token Auth Key field is populated. Then go to your Bunny dashboard, open the pull zone, go to the Security tab, and confirm Token Authentication is enabled. The token key in WP Media Cloud must match the key shown in Bunny. A mismatch causes signed URL verification to fail and the download returns Access Denied.
For Cloudflare R2:
Signed URLs use your existing R2 credentials. Confirm the Account ID, Access Key ID, and Secret Access Key in WP Media Cloud > Settings > Storage are correct. Run the connection test to verify. No additional Cloudflare configuration is required for signed downloads on R2.
Check 4: Has the signed URL expired?#
Signed URLs are valid for 10 minutes. If a customer is clicking a download link more than 10 minutes after it was generated, the URL will have expired and the download will return an Access Denied or URL expired error from the storage provider.
Signed URLs are generated fresh each time a customer clicks a download link in WooCommerce. The expiry window starts from the moment the customer clicks the link, not from when the order was placed. If customers are reporting expired links immediately, confirm the system clocks on your server and storage provider are in sync — a clock skew of more than a few minutes can cause freshly generated signed URLs to appear expired.
Check 5: Is the download file URL saved correctly in WooCommerce?#
WooCommerce stores the downloadable file URL in the product settings. If the file URL saved in the product is a local URL (pointing to your server) rather than a cloud storage or CDN URL, WP Media Cloud cannot intercept it as an offloaded file download.
Go to the product in WooCommerce > Products, open the Downloadable Files section, and check the file URL. If it shows a local URL, either re-upload the file to trigger automatic offloading and update the URL, or manually update the URL to the cloud storage URL and save the product.
Check 6: Is the bucket accessible without a signed URL?#
If secure downloads is disabled and the download file is returned as a plain CDN URL, the bucket must be publicly accessible for the download to work. If the bucket is private, plain CDN URLs return Access Denied. Either enable secure downloads on a supported provider or ensure the bucket has public read access.
Troubleshooting a specific download error#
To diagnose a specific download failure, place a test order and attempt the download. In your browser’s developer tools, open the Network tab and observe the redirect chain when you click the download link. Check:
- The URL WooCommerce redirects to — confirm it is a cloud storage or CDN URL, not a local URL
- The HTTP status code from the storage provider — 403 indicates an access or signature error, 404 indicates the file is not in the bucket at the expected path, 200 indicates a successful download
- If using signed URLs, confirm the URL contains a token or signature parameter