Bring in "Hard Entry" and "Hard Exit" road_flags that can be put on any road type. In particular, these can be used to effectuate the difficulty of crossing a bridgeless river. (But could also be used for special extras like trench warfare and cheval de frise). For rest of the post I'll just speak about rivers as if they hypothetically have these flags.
"Hard Entry":
Entering a tile with a river from a tile that has no river, uses all moves.
Exceptions:"Hard Exit":
Exiting a tile with a river to a tile that has no river, uses all moves.
Not applicable to:
1. Units with IgTer flag or those not affected by TerrainSpeed (e.g., aircraft etc.)
2. Wherever there is an existing bridge/rail etc., the cheaper move cost applies.
Optional Considerations:
Hard Entry and Hard Exit penalties apply only where the RESTRICT_INFRA context is active. (Domestic/friendly units don't suffer hard entry/exit penalties on rivers, but pay normal move cost.)