diff --git a/inc/admin/options.php b/inc/admin/options.php
index b822cd876b..75d07f89f7 100644
--- a/inc/admin/options.php
+++ b/inc/admin/options.php
@@ -954,7 +954,7 @@ function rocket_settings_callback( $inputs ) {
$checked = rocket_check_key();
}
- if ( is_array( $checked ) ) {
+ if ( isset( $checked ) && is_array( $checked ) ) {
$inputs['consumer_key'] = $checked['consumer_key'];
$inputs['consumer_email'] = $checked['consumer_email'];
$inputs['secret_key'] = $checked['secret_key'];
diff --git a/inc/compat.php b/inc/compat.php
index d07a963bb0..1fe299fafa 100644
--- a/inc/compat.php
+++ b/inc/compat.php
@@ -87,4 +87,131 @@ function apply_filters_deprecated( $tag, $args, $version, $replacement = false,
return apply_filters_ref_array( $tag, $args );
}
-}
\ No newline at end of file
+}
+
+
+/**
+ * Copied from core for compatibility with WP < 4.4
+ * A wrapper for PHP's parse_url() function that handles consistency in the return
+ * values across PHP versions.
+ *
+ * PHP 5.4.7 expanded parse_url()'s ability to handle non-absolute url's, including
+ * schemeless and relative url's with :// in the path. This function works around
+ * those limitations providing a standard output on PHP 5.2~5.4+.
+ *
+ * Secondly, across various PHP versions, schemeless URLs starting containing a ":"
+ * in the query are being handled inconsistently. This function works around those
+ * differences as well.
+ *
+ * Error suppression is used as prior to PHP 5.3.3, an E_WARNING would be generated
+ * when URL parsing failed.
+ *
+ * @since 4.4.0
+ * @since 4.7.0 The $component parameter was added for parity with PHP's parse_url().
+ *
+ * @param string $url The URL to parse.
+ * @param int $component The specific component to retrieve. Use one of the PHP
+ * predefined constants to specify which one.
+ * Defaults to -1 (= return all parts as an array).
+ * @see http://php.net/manual/en/function.parse-url.php
+ * @return mixed False on parse failure; Array of URL components on success;
+ * When a specific component has been requested: null if the component
+ * doesn't exist in the given URL; a sting or - in the case of
+ * PHP_URL_PORT - integer when it does. See parse_url()'s return values.
+ */
+if ( ! function_exists( 'wp_parse_url' ) ) {
+ function wp_parse_url( $url, $component = -1 ) {
+ $to_unset = array();
+ $url = strval( $url );
+
+ if ( '//' === substr( $url, 0, 2 ) ) {
+ $to_unset[] = 'scheme';
+ $url = 'placeholder:' . $url;
+ } elseif ( '/' === substr( $url, 0, 1 ) ) {
+ $to_unset[] = 'scheme';
+ $to_unset[] = 'host';
+ $url = 'placeholder://placeholder' . $url;
+ }
+
+ $parts = @parse_url( $url );
+
+ if ( false === $parts ) {
+ // Parsing failure.
+ return $parts;
+ }
+
+ // Remove the placeholder values.
+ foreach ( $to_unset as $key ) {
+ unset( $parts[ $key ] );
+ }
+
+ return _get_component_from_parsed_url_array( $parts, $component );
+ }
+}
+
+/**
+ * Copied from core for compatibility with WP < 4.7
+ * Retrieve a specific component from a parsed URL array.
+ *
+ * @internal
+ *
+ * @since 4.7.0
+ *
+ * @param array|false $url_parts The parsed URL. Can be false if the URL failed to parse.
+ * @param int $component The specific component to retrieve. Use one of the PHP
+ * predefined constants to specify which one.
+ * Defaults to -1 (= return all parts as an array).
+ * @see http://php.net/manual/en/function.parse-url.php
+ * @return mixed False on parse failure; Array of URL components on success;
+ * When a specific component has been requested: null if the component
+ * doesn't exist in the given URL; a sting or - in the case of
+ * PHP_URL_PORT - integer when it does. See parse_url()'s return values.
+ */
+if ( ! function_exists( '_get_component_from_parsed_url_array') ) {
+ function _get_component_from_parsed_url_array( $url_parts, $component = -1 ) {
+ if ( -1 === $component ) {
+ return $url_parts;
+ }
+
+ $key = _wp_translate_php_url_constant_to_key( $component );
+ if ( false !== $key && is_array( $url_parts ) && isset( $url_parts[ $key ] ) ) {
+ return $url_parts[ $key ];
+ } else {
+ return null;
+ }
+ }
+}
+
+/**
+ * Copied from core for compatibility with WP < 4.7
+ * Translate a PHP_URL_* constant to the named array keys PHP uses.
+ *
+ * @internal
+ *
+ * @since 4.7.0
+ *
+ * @see http://php.net/manual/en/url.constants.php
+ *
+ * @param int $constant PHP_URL_* constant.
+ * @return string|bool The named key or false.
+ */
+if ( ! function_exists( '_wp_translate_php_url_constant_to_key') ) {
+ function _wp_translate_php_url_constant_to_key( $constant ) {
+ $translation = array(
+ PHP_URL_SCHEME => 'scheme',
+ PHP_URL_HOST => 'host',
+ PHP_URL_PORT => 'port',
+ PHP_URL_USER => 'user',
+ PHP_URL_PASS => 'pass',
+ PHP_URL_PATH => 'path',
+ PHP_URL_QUERY => 'query',
+ PHP_URL_FRAGMENT => 'fragment',
+ );
+
+ if ( isset( $translation[ $constant ] ) ) {
+ return $translation[ $constant ];
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/inc/front/cdn.php b/inc/front/cdn.php
index 4944664c92..fabb3bdeae 100644
--- a/inc/front/cdn.php
+++ b/inc/front/cdn.php
@@ -135,6 +135,10 @@ function rocket_cdn_images( $html ) {
list( $host, $path, $scheme, $query ) = get_rocket_parse_url( $image_url );
+ if ( empty( trim( $path ) ) || '{href}' === $path ) {
+ continue;
+ }
+
if ( isset( $cnames[ $host ] ) ) {
continue;
}
diff --git a/inc/front/process.php b/inc/front/process.php
index fa4b1ad673..cbe11c2234 100755
--- a/inc/front/process.php
+++ b/inc/front/process.php
@@ -130,7 +130,7 @@
}
// Don't cache page with these user agents
-if ( isset( $rocket_cache_reject_ua, $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '#(' . $rocket_cache_reject_ua . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) {
+if ( isset( $rocket_cache_reject_ua, $_SERVER['HTTP_USER_AGENT'] ) && ! empty( trim( $rocket_cache_reject_ua ) ) && preg_match( '#(' . $rocket_cache_reject_ua . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) {
rocket_define_donotminify_constants( true );
return;
}
@@ -410,4 +410,4 @@ function rocket_get_ip() {
}
return '0.0.0.0';
-}
\ No newline at end of file
+}
diff --git a/inc/functions/formatting.php b/inc/functions/formatting.php
index ec5efd027f..68f10f8a18 100755
--- a/inc/functions/formatting.php
+++ b/inc/functions/formatting.php
@@ -157,7 +157,7 @@ function get_rocket_parse_url( $url ) {
return;
}
- $url = parse_url( $url );
+ $url = wp_parse_url( $url );
$host = isset( $url['host'] ) ? strtolower( $url['host'] ) : '';
$path = isset( $url['path'] ) ? $url['path'] : '';
$scheme = isset( $url['scheme'] ) ? $url['scheme'] : '';
@@ -206,4 +206,4 @@ function rocket_get_cache_busting_paths( $filename, $extension ) {
'filepath' => $cache_busting_filepath,
'url' => $cache_busting_url
);
-}
\ No newline at end of file
+}
diff --git a/min/.htaccess b/min/.htaccess
index 6604d2ecc7..d5658ef238 100755
--- a/min/.htaccess
+++ b/min/.htaccess
@@ -1,11 +1,6 @@
-
-
- Allow from all
-
-
- Require all granted
-
-
+
+Allow from all
+
RewriteEngine on
diff --git a/wp-rocket.php b/wp-rocket.php
index e802a291e7..5191e61bbb 100755
--- a/wp-rocket.php
+++ b/wp-rocket.php
@@ -3,7 +3,7 @@
Plugin Name: WP Rocket
Plugin URI: https://wp-rocket.me
Description: The best WordPress performance plugin.
-Version: 2.9.7
+Version: 2.9.8
Code Name: Iridonia
Author: WP Media
Contributors: Jonathan Buttigieg, Julio Potier, Remy Perona
@@ -19,7 +19,7 @@
defined( 'ABSPATH' ) or die( 'Cheatin’ uh?' );
// Rocket defines
-define( 'WP_ROCKET_VERSION' , '2.9.7' );
+define( 'WP_ROCKET_VERSION' , '2.9.8' );
define( 'WP_ROCKET_PRIVATE_KEY' , false );
define( 'WP_ROCKET_SLUG' , 'wp_rocket_settings' );
define( 'WP_ROCKET_WEB_MAIN' , false );