Opened 11 years ago
Last modified 3 weeks ago
#21077 reopened enhancement
Add support for custom ports in multisite site addresses
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Future Release | Priority: | normal |
Severity: | normal | Version: | 3.4 |
Component: | Bootstrap/Load | Keywords: | has-patch has-unit-tests |
Focuses: | multisite | Cc: |
Description
This patch enables MultiSite to be used with a custom port, what must be defined as WP_CUSTOM_PORT in wp-config.php.
Attachments (4)
Change History (39)
#2
@
11 years ago
Yeah. ms-settings.php could stand for a scrub.
I've never been sure why custom ports are blocked in multisite. During the merge in 3.0, we tried to clean things up, but we tried not to ask "why" too often as everything would have been a rabbit hole.
We should probably review the history in MU and then work to just allow custom ports to work, without a constant.
#5
@
11 years ago
- Cc 24-7@… added
- Severity changed from normal to major
+1 Just encountered a situation where I - in a local MU setup - can't use the default port of :80/:443. Now I'm left with a core hack.
#8
@
11 years ago
- Keywords needs-testing dev-feedback added
Scribus idea with parse_url is likely the route to go. Patch following that will
- also takes the absence of
$_SERVER['HTTP_HOST']
into account and switch to$_SERVER['SERVER_NAME']
for reliability and those edge cases - takes the domain via
parse_url()
andPHP_URL_PATH
- still falls back to the default
wp_die()
-message in case somehow couldn't get rid of the port
Patch needs more intense testing.
#9
@
11 years ago
- Keywords close added; has-patch needs-testing dev-feedback removed
Closed in favor of #15936 as it seems to address IPv6 issues as well. Adding new patch there.
#10
@
11 years ago
- Keywords close removed
- Milestone Awaiting Review deleted
- Resolution set to duplicate
- Status changed from new to closed
Duplicate of #15936.
This ticket was mentioned in Slack in #core-multisite by jeremyfelt. View the logs.
4 years ago
#12
@
4 years ago
- Component changed from Multisite to Bootstrap/Load
- Focuses multisite added
- Keywords needs-patch needs-unit-tests added
- Milestone set to Future Release
- Resolution duplicate deleted
- Severity changed from major to normal
- Status changed from closed to reopened
- Summary changed from Custom port patch for MultiSite to Add support for custom ports in multisite site addresses
#13
@
4 years ago
I've reopened this ticket since it was one of the first closed as a duplicate of #15936, which we've now closed as a separate area of focus. See also #42993, which can be considered a duplicate of this ticket. I've also attached the latest patch from #15936, 15936.5.diff, which handles some port number changes and some unnecessary IPv6 changes.
A few things to watch for / decide on:
- Is it enough to just support port numbers in the multisite bootstrap or should the UI fully support them as well? Things may seem a little strange at first.
- Should all port numbers be allowed or should there be a filtered list?
The best place to test this now may be in the default WordPress local development environment, which uses localhost:8889
as its address and requires a port number.
This ticket was mentioned in Slack in #core-multisite by johnbillion. View the logs.
4 years ago
This ticket was mentioned in Slack in #core-multisite by jeremyfelt. View the logs.
4 years ago
This ticket was mentioned in Slack in #core-multisite by spacedmonkey. View the logs.
4 years ago
This ticket was mentioned in Slack in #core-multisite by spacedmonkey. View the logs.
4 years ago
#18
follow-up:
↓ 19
@
3 years ago
Should all port numbers be allowed or should there be a filtered list?
I think all port numbers should be allowed.
Story time. Yesterday I had to switch back to using MAMP PRO for local stuff. It makes both Apache and Nginx web servers available, both with http
and https
schemes, all on different ports. Depending on my /etc/hosts setup, depending on WordPress constants and options being filtered, depending on what I'm working on or testing, it's pretty convenient to have WordPress available on so many different ports.
MAMP has its own default ports but you can easily use 80/443/81/7443, or whatever you want really. The ability to use any port numbers is useful if you also have Docker/Lando running, or have Local running, or Valet, etc... especially when transitioning between environments.
I assume it would also be really useful with running multiple instances of something like VVV.
Lastly, ports are valid URL segments, even if they are weird to see. IMO, that means there is some inherent obligation to support them.
#19
in reply to:
↑ 18
@
3 years ago
Replying to johnjamesjacoby:
Should all port numbers be allowed or should there be a filtered list?
I think all port numbers should be allowed.
I think this makes sense, especially given the story. That said, if there was a way to just get #52088 out the door by supporting only the port that WordPress is using for its development environment, that would at least be a start.
I'm not actively involved with this ticket, but I want to clarify my last comment in case it's preventing further progress here. 15936.5.diff is some prior work from another ticket and I don't think it addresses what is actually needed for this. It does provide some prior patch art though.
What's missing for this current ticket (IMO) is:
- Proposed solution to how a custom port should be recognized and managed in bootstrap/load and (maybe? maybe not) managed with networks/sites in the network admin UI.
- How to test the solution as part of the standard WP build process. Unit tests, end to end tests?
- Code to implement the above.
- How to test the solution locally. (Maybe it's just that the dev environment works!) :)
I'm happy to help with testing in a local environment once it's there, but I don't have the bandwidth for solution creating right now. :)
#20
@
3 years ago
I think the question is, do we officially support custom ports, add a input when you register a site and save the port number somewhere ( site meta ). Then change bootstrap to support any port.
Or do we just give enough filters and hooks to enable developers to add support themselves, similar to domain mapping.
I would recommend the second course and I would even write a drop in / plugin to allow developers to do this.
I think that the current patch 15936.5.diff does solve this problem and does allow developers to do what they want.
Currently to add a custom port, you would have to add a sunrise.php and then add a filter that looks like this.
add_filters('allowed_multisite_ports', function( $current ){
$current[] = ':81';
return $current;
});
I think we would also need something in the bootstrap to looks up the site via a port.
This is work of course, but is not exactly use friendly. Maybe instead of filter, we could do with a PHP const.
define( 'WP_ALLOWED_PORTED', '80, 443' );
Once noting that not really good idea to have an array value of a const. So we could just use wp_parse_list.
So when we use it, would looks like this.
$allowed_ports = wp_parse_list( WP_ALLOWED_PORTED );
Thoughts @jeremyfelt @johnjamesjacoby
This ticket was mentioned in PR #1963 on WordPress/wordpress-develop by soderlind.
2 years ago
#21
- Keywords has-patch added; needs-patch removed
Fix bug in patch 15936.5.diff, re-add the port number in ms-site.php
Trac ticket: https://core.trac.wordpress.org/ticket/21077
#22
@
2 years ago
Please be nice, the pull request is my first patch :)
You can test it locally using VS Code devcontainer available as part of my plugin. A how-to is also available.
This ticket was mentioned in Slack in #core-multisite by soderlind. View the logs.
2 years ago
soderlind commented on PR #1963:
2 years ago
#24
@costdev I'm looking into why the unit tests failed.
soderlind commented on PR #1963:
2 years ago
#25
@costdev New unit test added.
This ticket was mentioned in Slack in #core-committers by spacedmonkey. View the logs.
21 months ago
#27
@
21 months ago
I'll add a note that multisite with custom ports appear to work out of the box, but requires you to edit the wp_sites
database entry, and add the :<port>
your self. This is because the sanitize on save function in multisite strips out :
, leaving you with a url<port>
instead of url:<port>
db entry if using the interface.
I'm not sure if there's any other issue besides this one, if there's any concerns beyond back-compat then this is the place to outline them, but from some preliminary testing it would appear that updating the filters to allow a format of :[0-9]+
to pass through the sanitizer on save shouldn't break anything, and open things up for custom ports to the users hearts desire 🤔
#28
@
21 months ago
I spent another couple of hours hacking on this problem, still finding issues. The issue, as I see, it where to store the custom port. If you store it as part of a domain, then that makes issues all over core, when domain is no longer domain but domain + port. I had to make lots of changes to get multisite to even bootstrap. The best place to store port number is in site ( blog ) meta. This keep the port number close to the site in meta but does not break anything.
I prototyped how this might work in this sunrise.php dropin.
What made it hard to test, was the lack of this filter.
$allowed_ports = apply_filters( 'allowed_multisite_ports', array( ':80', ':443' ) );
To help third parties be able to work out their own solution for this, I recommend a new ticket to add this filter. That way this functionality is not blocked while we work on another solution.
This ticket was mentioned in Slack in #core-test by ironprogrammer. View the logs.
10 months ago
#32
@
3 months ago
My multisite network is running on localhost:8082
. Everything seems to be working fine for now with this code:
<?php add_filter( 'wp_normalize_site_data', function( $data ) { $data['domain'] = str_replace('8082', ':8082', $data['domain']); return $data; }, 50, 1 );
I've added this in mu-plugins, but I guess it can go in your theme's functions.php
or a regular plugin as well.
I can add a new site trough wp-admin or via wpmu_create_blog()
without any problems.
Note that if your domain is called domain8082.com or something similar, this code will not work :)
This ticket was mentioned in PR #5675 on WordPress/wordpress-develop by @obliviousharmony.
3 weeks ago
#33
- Keywords has-unit-tests added; needs-unit-tests removed
This _should_ cover all of the areas that break when using multisite with a port.
Trac ticket: https://core.trac.wordpress.org/ticket/21077
This ticket was mentioned in PR #5675 on WordPress/wordpress-develop by @obliviousharmony.
3 weeks ago
#34
This _should_ cover all of the areas that break when using multisite with a port.
Trac ticket: https://core.trac.wordpress.org/ticket/21077
Multisite custom port patch