Opened 19 months ago
Last modified 18 months ago
#58803 new defect (bug)
Infinite loop in canonical.php
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Awaiting Review | Priority: | normal |
Severity: | minor | Version: | 6.2 |
Component: | Canonical | Keywords: | |
Focuses: | Cc: |
Description
A site 24x7 monitor that points to a URL on our website leads to an error with infinite loops reported.
This error started after the page being pointed by the monitor received a new Slug, leading to HTTP redirection due to autocomplete to the closest URL. Still, I believe it occurs only during periods of transient availability of our shared host.
Looking at the source code [REF2] I believe there is potential for an infinite loop on line 800. Possible fix in [REF3].
By assigning the result of redirect_canonical() to a variable ($chained_redirect) before the if statement, we ensure that the same value is used throughout the if block preventing unnecessary recursive calls.
References
[REF1]
HTTP/1.1 508 Loop Detected
Server : nginx
...
[REF2]
https://github.com/WordPress/wordpress-develop/blob/6.2/src/wp-includes/canonical.php#L780-812
[REF3]
Protect against chained redirects.
$chained_redirect = redirect_canonical($redirect_url, false);
if (!$chained_redirect)
$chained_redirect = redirect_canonical($redirect_url, false);
if (!$chained_redirect)
It help prevent the infinite loop by ensuring that the same result of redirect_canonical() is consistently used within the if block. This approach might mitigate the recursive redirection issue and the resulting infinite loop.
Steps: You can manually check on browser developer tools to inspect network requests and redirects or use this tool Link:redirect checker This can help you with Canonical URLs and identify the loop and detail redirection chain and its http status code.