Pixophir move_and_slide doesn't exist for rigid bodies. The problem is not the dection of the floor, the problem is that whenever a contact is recorded the vertical force is already gone.
Let's say my scene is configured like this:

The body has attached this script:
func _integrate_forces(state):
if get_contact_count() > 0:
print("from _integrate_forces: ", linear_velocity.y);
func _physics_process(delta):
if get_contact_count() > 0:
print("from _physics_process: ", linear_velocity.y);
At the exact moment when the body touches the floor (when the contact is recorded) the linear_velocity is already 0, in fact this code prints:
from _integrate_forces: 0
from _physics_process: 0
So I cannot redirect the force in another direction because it's cleared before my code runs.
Maybe I should save the linear velocity at each frame and use it after the contact has been recorded, but it doesn't seem like the right way.