That is called canonical redirect.
And it’s done through redirect_canonical()
which basically
Redirects incoming links to the proper URL based on the site url.
and
Will also attempt to find the correct link when a user enters a URL
that does not exist based on exact WordPress query.
(Those excerpts were both taken from the function’s reference.)
So in your case, although the post parent of A
has changed from X
to Y
, the post A
(or a post with that slug) still exists, and therefore, when you visit the old URL:
http://websitename/index.php/X/A/ (old URL - post parent is X)
with canonical redirect, you’d be redirected to the correct URL:
http://websitename/index.php/Y/A/ (new URL - post parent is Y)
and not being presented with a 404
(page not found) error page.
Try visiting http://websitename/index.php/A/
and you’d see the canonical redirect being applied.
And if you visit http://websitename/index.php/A123z/
, assuming there are no post with A123z
as the slug, then you’d see the 404 error page.