do you mean simply
add chain=prerouting in-interface=bridge source-address=(singleLANIP) dst-address-type=!local action=mark-routing new-routing-mark=to_ISP2
I doubt it. If ISP2 is exclusive to the webserver, I’d think of this as a one-to-one NAT where all but HTTP is firewalled. If thinking of this as a one-to-one nat, it feels a bit more semantic to not have connection-marking rules. If familiarizing myself with the config and at first glance I saw connection-marking rules, it would make me think there is load balancing or failover.
Well the real question is how you can route mark nothing LOL?
The other methods include either identifying traffic as either packets or connections(more efficient).
So first packet from 192.168.1.28 arrives and guess what, first rule matches and connection gets mark ISP1_conn. Next rule will be checked too, but connection-mark=no-mark no longer matches. Swap the rules and connections from 192.168.1.28 will get ISP2_conn mark as you want.
That’s nothing against what others wrote, if this is everything you need, it can be achieved using smaller config. I’m just pointing out obvious mistake.