- $diff_ec = array_diff_assoc($parsed_entry_url, $parsed_content_url);
- $diff_ce = array_diff_assoc($parsed_content_url, $parsed_entry_url);
+ $parsed_entry_url = parse_url($entry->getUrl());
+ $parsed_content_url = parse_url($url);
+
+ /**
+ * The following part computes the list of part changes between two
+ * parse_url arrays.
+ *
+ * As array_diff_assoc only computes changes to go from the left array
+ * to the right one, we make two differents arrays to have both
+ * directions. We merge these two arrays and sort keys before passing
+ * the result to the switch.
+ *
+ * The resulting array gives us all changing parts between the two
+ * urls: scheme, host, path, query and/or fragment.
+ */
+ $diff_ec = array_diff_assoc($parsed_entry_url, $parsed_content_url);
+ $diff_ce = array_diff_assoc($parsed_content_url, $parsed_entry_url);
+
+ $diff = array_merge($diff_ec, $diff_ce);
+ $diff_keys = array_keys($diff);
+ sort($diff_keys);
+
+ if ($this->ignoreUrl($entry->getUrl())) {
+ $entry->setUrl($url);