} elseif ( substr( $url, 0, 1 ) == '/' ) {
// If $serverUrl is protocol-relative, prepend $defaultProtoWithoutSlashes,
// otherwise leave it alone.
- $url = ( $serverHasProto ? '' : $defaultProtoWithoutSlashes ) . $serverUrl . $url;
+ if ( $serverHasProto ) {
+ $url = $serverUrl . $url;
+ } else {
+ // If an HTTPS URL is synthesized from a protocol-relative $wgServer, allow the
+ // user to override the port number (T67184)
+ if ( $defaultProto === PROTO_HTTPS && $wgHttpsPort != 443 ) {
+ if ( isset( $bits['port'] ) ) {
+ throw new Exception( 'A protocol-relative $wgServer may not contain a port number' );
+ }
+ $url = $defaultProtoWithoutSlashes . $serverUrl . ':' . $wgHttpsPort . $url;
+ } else {
+ $url = $defaultProtoWithoutSlashes . $serverUrl . $url;
+ }
+ }
}
$bits = wfParseUrl( $url );
- // ensure proper port for HTTPS arrives in URL
- // https://phabricator.wikimedia.org/T67184
- if ( $defaultProto === PROTO_HTTPS && $wgHttpsPort != 443 ) {
- $bits['port'] = $wgHttpsPort;
- }
-
if ( $bits && isset( $bits['path'] ) ) {
$bits['path'] = wfRemoveDotSegments( $bits['path'] );
return wfAssembleUrl( $bits );
return false;
}
+/**
+ * Get the wiki's "server", i.e. the protocol and host part of the URL, with a
+ * protocol specified using a PROTO_* constant as in wfExpandUrl()
+ *
+ * @since 1.32
+ * @param string|int|null $proto One of the PROTO_* constants.
+ * @return string The URL
+ */
+function wfGetServerUrl( $proto ) {
+ $url = wfExpandUrl( '/', $proto );
+ return substr( $url, 0, -1 );
+}
+
/**
* This function will reassemble a URL parsed with wfParseURL. This is useful
* if you need to edit part of a URL and put it back together.
function wfExpandIRI( $url ) {
return preg_replace_callback(
'/((?:%[89A-F][0-9A-F])+)/i',
- 'wfExpandIRI_callback',
+ function ( array $matches ) {
+ return urldecode( $matches[1] );
+ },
wfExpandUrl( $url )
);
}
-/**
- * Private callback for wfExpandIRI
- * @param array $matches
- * @return string
- */
-function wfExpandIRI_callback( $matches ) {
- return urldecode( $matches[1] );
-}
-
/**
* Make URL indexes, appropriate for the el_index field of externallinks.
*