You can block Reddit and keep a few subreddits, but only with a blocker that reads the whole URL. Block reddit.com, then allow the paths you want, like reddit.com/r/learnpython. A browser extension or a focus app with path rules can do it. Pi-hole, your router, and the hosts file can't, and no setting will change that.
We build a website blocker, so we spend a lot of time on exactly this kind of rule. Writing it takes two minutes. What trips people up is everything Reddit does around it: extra hostnames, share links that redirect, and the fact that an allowed subreddit is still a feed.
Why your router can't tell r/gaming from r/learnpython
DNS filtering works on names. Your browser asks for reddit.com, and Pi-hole or OpenDNS either answers or it doesn't. The part after the domain never reaches it. The hosts file on your laptop has the same blind spot.
HTTPS closes the last gap. The path travels encrypted, so a router or school firewall sees the hostname and nothing else unless it is decrypting traffic, which home setups almost never do. When someone asked on the OpenDNS community forum how to block parts of Reddit, the answer was the one we'd give: you can't do it with DNS, use software running on the machine.
So this is a job for something that sees the full address. In practice, that means your browser.
Decide what you actually want open
"Allow certain subreddits" covers two very different setups, and it's worth knowing which one you need before you pick a tool.
One is a short list of communities you browse on purpose: r/AskHistorians, the subreddit for your framework, the one for your city. The other is reading a specific thread you found through Google, then leaving. The first needs a subreddit allowlist. The second only needs the thread.
Most people ask for the first when they need the second. If you open r/webdev to check an answer about CSS grid, the subreddit's front page is the last thing you want loaded. It's a feed, sorted by Hot and refreshed all day. Allowing the whole subreddit to read one answer is like unblocking YouTube to watch one tutorial.
Setting up a subreddit allowlist
If a short list of subreddits is what you want, the order of the rules matters, so do it in this sequence: - Block reddit.com itself, so the home feed, Popular, All, and search are gone by default. - Add an exception for each subreddit path, like reddit.com/r/learnpython. Check whether your tool treats it as a prefix or needs a trailing wildcard such as /r/learnpython/*. - Cover old.reddit.com. It's a separate hostname, and a rule written for www.reddit.com won't catch it. - Open a clean tab and test four URLs: the homepage, a blocked subreddit, an allowed subreddit, and a thread inside it.
FocusMe and Focus Bear both document this exact pattern in their help pages, so if you already use one of them, start there. If your current blocker only accepts domain names, stop fighting it. It can't do this.
The side doors Reddit leaves open
Get the rule in and Reddit still finds ways around it. Share links are the first. Copy a link from the Reddit app and you get something like reddit.com/r/name/s/abc123, which redirects to the real thread. Older short links go through redd.it. Depending on how your blocker matches, the redirect either lands fine or bounces off the block. Test one before you rely on it.
Images and video come from i.redd.it and v.redd.it. Block those too and your allowed threads load with holes in them. Some people like that. Most don't, so leave them open.
Capitalisation is the quiet one. Reddit treats r/Python and r/python as the same place, but a blocker comparing text exactly may not. Write the name the way your address bar shows it.
And none of this touches your phone. If the Reddit app is where the hours go, a Chrome rule won't help. Delete the app, or put a screen time limit on it.
Our take: allow threads, not subreddits
For focused work, a subreddit allowlist is too generous. It leaves a front page inside every subreddit you allow, and the front page is the whole problem.
That's the idea Kyte is built on. The Kyte Chrome extension is free, and it blocks at the URL level: you block reddit.com, then allow one exact page, like the thread with the answer you need. The thread opens. The subreddit's front page, the rest of Reddit, and every link out of that thread stay blocked. Core features don't need an account, and your lists stay on your device.
It is narrower on purpose, which makes it the wrong tool for an evening on a community you enjoy. If you want r/AskHistorians open all night, use a path rule in a tool like FocusMe, or a Reddit-only extension such as Reddit Liberation, whose store listing describes a subreddit whitelist. Using both is a perfectly good setup: single threads during work, a looser rule after.
Make the rule hard to undo
Every allowlist fails the same way. You edit it. Adding one more subreddit takes five seconds, and at 3pm with a dull task open, five seconds is nothing.
Write the list on Monday morning, when you're thinking clearly, and leave it alone until next week. Use timed sessions, so blocking ends on its own instead of when you switch it off. Kyte's Chrome extension has them for free.
If desktop apps are the bigger leak, Kyte for Mac (a one-time purchase of $19, no subscription) blocks apps system-wide and runs daily schedules. It doesn't block websites system-wide yet, so your Reddit rules still live in the Chrome extension.
Block the domain first, then let in as little as the task needs. For most work that's one thread, not a whole subreddit, and never the front page.
Block Reddit, allow the one thread you need. Get the free Kyte Chrome extension.
Get started