On Nginx I use this rule (mind the extra $ in the ^/(.*)$ part !
rewrite ^/(.*)$ /VirtualHostBase/https/$http_host:443/Plone/VirtualHostRoot/$1 break;
So maybe you can try it with this rule:
rewrite ^/(.*)$ /VirtualHostBase/https/%{HTTP_HOST}:443/Plone/VirtualHostRoot/$1 [P,L]
Or try to replace http://localhost:8080 with this http://127.0.0.1:8080, sometimes the Windows or Linux hosts file is containing for localhost a dynamically assigned IP address like 192.168.1.2
Try to replace localhost in your rewrite rule with your local assigned IP address, but check if in zope.conf if the http-server is listening to your local ip address. See below the examples.
Run in windows CMD box: ipconfig to view your assigned IP address on the network card you are using. In Linux run ifconfig ( "mind the f!")
This Zope http server is listening to the local IP address 127.0.0.1 only on port 8080!
<http-server>
address 8080
</http-server>
This server is listening to ip address 192.168.1.2 on port 8080
<http-server>
address 192.168.1.2:8080
</http-server>
This server is listening to ALL assigned IP addresses on your network card in use on port 8080. (not recommended for security reasons, but sometimes needed to figure out if you can reach the Zope http server.
<http-server>
address 0.0.0.0:8080
</http-server>
Success