Hugo use page permalinks to map Days from different folders to the same section in URL
Redirecting stuff
Had /dtb/days/day122.md
-type posts, the older ones, and /dtb/days/1234-1234-my-title.md
-type newer posts. They lived both in the same directory on disk, /content/dtb/days/...
. The latter were converted from Obsidian, which meant (among other things) that deleting a page in Obsidian wouldn’t automatically delete the corresponding converted one in Hugo, and I couldn’t just rm -rf ..../days
before each conversion because that would delete the older day234.md
posts.
I wanted to put them in different folders on disk in ./content/
, but keep the url structure serhii.net/dtb/post-name/
for both of them.
Solution was making all /dtb
posts (incl. pages) use the section (dtb
) in the permalink in config.yaml
:
permalinks:
dtb: '/:section/:filename'
Now they do, regardless of their location on disk.
Then I moved the old posts into ./content/dtb/old_days
, kept the new ones in ./content/dtb/days
Lastly, this removes all converted posts (= all .md
s except _index.md
) before conversion so that no stray markdown posts are left:
find $OLD_DAYS | grep -v _index.md | xargs rm
Unsolved problems
Google still has serhii.net/dtb/days/...
pages cached, and currently they’re available both from there and from /dtb/...
. I can’t find a way to redirect all of the /dtb/days/...
to /dtb/...
except manually adding stuff to the frontmatter of each. I have scripts for that, but still ugly.
.htaccess
is our friend.
" RewriteRule ^d/dtb(.*)$ /dtb$1 [R=301,NC,L]
RewriteRule ^dtb/days(.*)$ /dtb$1 [R=301,NC,L]
This is getting more and more bloated.
Generally, I see absolutely no reason not to rewrite this mess of build scripts in Python. obyde
is a Python package, handling settings, file operations etc. is more intuitive to me in Python.
Instead I keep re-learning bash/zsh escape syntax every time, and I’m procrastinating doing error handling for the same reasons.
The only non-native thing would be rsync
and git
, which can be handled through a subprocess.