What we do is use route53 to make a "write" URL that points to the "primary endpoint" which will fail over to the current primary node if there is an issue. That way you don't have to update it in your app. Then put all the nodes under a "read" URL with round robin.
It's not often that you need to access read (from replicas) and write in the same application unless you are doing heavy reads and infrequent writes. Then you can maintain two redis client instances in the code. Not elegant, but effective.
With weighted round robin you can turn down the reads on the current primary if you like. Just have to be aware when a failover event happens to update it.
Set the TTL on the write URL to a low value, like 1 minute or less.