I've written before about Gemini, a relatively young protocol for sending, receiving and interpreting text based files over the Internet. A cross between Gopher and HTTP.
Because Gemini — like HTTP — is built on top of other Internet technologies, it uses the Domain Name system. A side effect of this is that if you have a gemini capsule at gemini://puppy.town
and somebody tries to load http://puppy.town
they will end up at whatever the default web site is on your server.
For my gemini capsule I dealt with this by just creating a landing page for the same domain name in the http/https
world. But today I was looking into whether it's possible to simply redirect a whole site to the gemini
protocol, and it turns out this is actually quite straightforward. The trick is to remember that http
and https
are themselves different protocols, yet we redirect from http to https all the time. In that case, it's easy to miss because they open the same files in the same browser. But if you have a Gemini browser like Lagrange, a redirect will open the URL in that application. If you're running nginx
as your web server software, a redirect is as simple as making a block like this in your default site config, or as a separate file, in your sites-available
directory:
server {
server_name puppy.town;
listen 80;
return 301 gemini://$host$request_uri;
}
To redirect both http
and https
, use certbot, which will essentially hoist your gemini redirect into an https block, and redirect http traffic to that (http => https => gemini). This will avoid users getting certificate errors, even though it feels like a waste of time given your https site is just redirecting to gemini.