Hacker News new | ask | show | jobs
by asb 1377 days ago
The uri directive does expose stripping a suffix, but that's an internal rewrite, correct?

For any /foo/ /bar/ /baz/ I want to redirect to /foo, /bar, or /baz. Unless I'm missing something, this needs to be done like so right now:

  @trailing_slash path_regexp trailing_slash ^/(.*)/$
  redir @trailing_slash /{re.trailing_slash.1} 308
1 comments

The uri directive can strip_prefix, strip_suffix, or do substring replacements: https://caddyserver.com/docs/caddyfile/directives/uri

It can also do regex replacements on the path portion of the URI. And yes, these are internal rewrites since uri is a directive that wires up the rewrite handler.

We actually have a special section in the docs all about enforcing trailing slashes, including external redirects: https://caddyserver.com/docs/caddyfile/patterns#trailing-sla...

Note that the file_server will automatically enforce canonical URIs, including redirecting to add or remove the trailing slash according to whether the resource is a file or a directory.

To redirect many unspecified paths, your regex is probably the best way to do it for now. Feel free to open an issue to propose an alternative!

Thanks! I'd read all that documentation and came to the same conclusion. I'm using disable_canonical_uris as I prefer avoiding trailing slashes even for directories (as I see it, page_name/index.html layout is an implementation detail, and I'd like Caddy to expose it as /page_name).

I'll follow up with issues tomorrow (I think an issue for updating the common caddyfile patterns bit on the website also makes sense - I suspect a blanket rule for removing trailing slashes is more likely to be a common pattern people seek a solution for than removing a trailing slash on explicitly enumerated paths).

The problem is, in the browser, relative URLs (like on CSS/JS assets and such) won't be relative to your index.html if you remove the trailing slash, and they'll instead be relative to the parent directory. That can mess things up.

Of course if you're using absolute paths in your HTML then this isn't a problem, but it does become a problem if you want to move to serving this same site from a subpath, because then your absolute paths won't be constrained to this subpath.