WordPress permalinks not working

WordPress permalinks not working? I feel your pain. Read on…

Recently, after setting up another virtual host on my Linux server, for a WordPress site, permalinks were not working. Any page other than home was getting a 404 error. I searched Google for help, but kept finding the same advise, which was basically to make sure that the .htaccess file was writable and had the correct permissions.

Sadly, it took me 2 days to solve this puzzle. (About 3-4 hours total.)

Come on, I’ve done this before!

This was the second time I was doing this, so I knew I had figured it out once before, and done all the work to learn how it is done, but for some reason the dots just weren’t connecting for me. It was very frustrating!

So now I am documenting it so that if I ever add another site, I’ll have a guide to remind me of exactly what is required to get it done in minutes, rather than hours.

The basic steps:

  1. Create site folder, and place the files for the website there
  2. Set permissions
  3. Create virtual host conf file
  4. Confirm that the site comes up insecure (HTTP)
  5. Use Let’s Encrypt to add SSL
  6. Confirm that the site only works in HTTPS mode

This is where things went wrong…

It was at this point that I realized that the permalinks were not working.

I began confirming that the .htaccess was correct. Then I remembered that I had done something to avoid .htaccess last time because I had read at least one page showing how it negatively affects site performance.

I started poking around the .conf file, adding in the Directory block, and making sure it contained the code that the .htaccess file had.

But the changes were not having any effect. I was a bit baffled as to why.

The Aha Moment

Finally, I realized that I was not in the right file! Let’s Encrypt creates a second .conf file, and that is where the code needs to be!

The first .conf file has :80 in it, and  handles HTTP traffic, and it redirects to HTTPS, so then the .conf from Let’s Encrypt is active. It has :443 in it, and that is where the code needs to be.

I opened up the :443 .conf file from the first site and immediately saw the code I was looking for. A few copy/paste’s later and the new site was working properly, and the mystery was solved.

The :443 .conf file has a Directory block in it, which tells the web server not to look for  .htaccess files. This improves performance. All that was required was to copy the .htaccess file content into that section.


Are you also a PHP programmer? I’ve got other blog entries that you might be interested in!


More about me

I have been programming for almost 20 years. It all started with Basic and RPG III way back in high school, and have played around with many languages. PHP is my main language today.

Some sites I have built:

For fans of BMX legend Scotty Cranmer: https://ScottyFan.com

Meet my Basenji’s Graham and Ginger: https://BarooBoos.com

Meet my newest Basenji, Zulu: https://ZuluJoy.com

Search engine for programmers – SymbolHound Search

Another great discovery

I found an interesting tool today called Symbol Hound. It is a search engine for programmers that allows you to include symbols in your search. Google tends to remove them, and as such is not really a good search engine for programmers. So if you’re looking for something like ‘php $’, or ‘#’, it doesn’t always return what you’d expect. This site indexes only major programming related sites like Stack Overflow. The owners say this is to help keep costs down. It costs a lot to house the data they crawl. They even politely ask you to turn off your ad blocker to support them. I turned mine off because I like to support other programmers, and I know how expensive it is to run a server.

Useful? Yes, but…

Personally, I don’t know how often I’ll use this tool, but I feel that it is valuable enough to write a blog post about it. It isn’t every day you need a search engine for programmers, but when you do, it’s nice to know there is one out there!

SearchHound logo

Check it out at http://SearchHound.com

*One thing to note is that it does not support https at the time of this posting. I have no idea why, since it doesn’t cost anything to set up a free SSL certificate.


Are you also a PHP programmer? I’ve got other blog entries that you might be interested in!


More about me

I have been programming for almost 20 years. It all started with Basic and RPG III way back in high school, and have played around with many languages. More recently, I worked with ColdFusion for 12 years. (Far too many!) And have since worked with Obj-C, Swift, C#, and PHP. I mostly stay focused on PHP and Laravel these days.

You can check out some of my other sites if you’d like:

A site for fans of BMX legend Scotty Cranmer: https://ScottyFan.com

Meet my Basenji’s Graham and Ginger: https://BarooBoos.com

Meet my newest Basenji, Zulu: https://ZuluJoy.com