Make WordPress Core

Opened 7 years ago

Last modified 2 years ago

#23483 new defect (bug)

Incorrect image URL for subsites when using UPLOADS constant on multisite subdirectory installation — at Version 7

Reported by: creativeinfusion Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version: 3.5.1
Component: Upload Keywords: needs-patch
Focuses: multisite Cc:
PR Number:

Description (last modified by SergeyBiryukov)

If the UPLOADS constant is used on a Wordpress Multisite installed to subdirectory, using subdirectory mode, then image URLs for subsites are incorrect.


  • WP MS installed to www.domain.com/wordpress, subdirectory not subdomain
  • UPLOADS set to 'assets'

Main site uploads images to /wordpress/assets/...
Main site image URL is www.domain.com/wordpress/assets/...

  1. Create subsite called 'subsite';
  2. Subsite uploads images to /wordpress/assets/sites/2/...
  3. Subsite image URL is www.domain.com/subsite/assets/sites/2/... when it should be www.domain.com/assets/sites/2/...

This is because wp_upload_dir() uses get_option('siteurl') to derive the URL. It is probably right for subdomain multisite but wrong in this use case.

Change History (7)

#1 @creativeinfusion
7 years ago

Tentative fix - check if multisite and not using subdomain install and use network_site_url instead

	if ( defined( 'UPLOADS' ) && ! ( is_multisite() && get_site_option( 'ms_files_rewriting' ) ) ) {
		if ( is_multsite() && is_subdomain_install() ) {
			$url = trailingslashit( $siteurl ) . UPLOADS;
		} else {
			$url = trailingslashit( network_site_url() ) . UPLOADS;

#2 @sabreuse
7 years ago

  • Component changed from General to Multisite

#3 @SergeyBiryukov
7 years ago

  • Description modified (diff)

#4 @creativeinfusion
7 years ago

Typo correction to point 3 (can't edit it myself)

Should read

  1. Subsite image URL is www.domain.com/subsite/assets/sites/2/... when it should be www.domain.com/assets/sites/2/...

#5 @creativeinfusion
7 years ago

Apologies, the tentative fix is too specific to the UPLOADS use case.

The site url is also used to deduce the url:

  • if upload_path option is specified and upload_url_path is not (this would also need a fix).
  • for old ms_files rewriting (probably does not need a fix).

#6 @creativeinfusion
7 years ago

Sorry about all the updates, but it's just dawned on me that the URL is set how it is by design, because in the absence of UPLOADS being used the subsite uploads url is just rewritten by
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)

That rewrite doesn't handle the situation in this ticket when the UPLOADS folder is outside wp-content, making it similar to the reason behind the warning Subdirectory networks may not be fully compatible with custom wp-content directories (if I understand that correctly).

#7 @SergeyBiryukov
7 years ago

  • Description modified (diff)
Note: See TracTickets for help on using tickets.