I made a mistake in changing my WordPress permalinks, but by the time I’d discovered it my blog had already been indexed. Fixing the permalinks meant breaking those indexed URLs, leading to a bad user experience, but leaving them as is wasn’t really an option.
Last night, after getting 404′d while using Google to search my own blog, I realized I had to do something.
First I looked at Apache mod_rewrite and the URL rewriting guide (as well as this cheat sheet from ilovejackdaniels), Then, frustrated, I found some items in the WordPress Codex, including this one about conflicts between .htaccess files/rules and this about problems with subdirectories inside the WordPress root.
The suggestions in both boil down to creating a specific error document:
Create a file on your website. Call it onerror.html. It can be empty or have just <html></html> in it for all that it matters.
In Wordpress’s .htaccess file, add this to the top of the file:
ErrorDocument 401 /path/to/onerror.html
ErrorDocument 403 /path/to/onerror.html
The explanation, though even the poster doesn’t claim to know that it’s the correct explanation, is that the rules are additive, and WordPress is greedy with trying to get requests directed to its own URL parsing routines. The ErrorDocument is supposed to keep more of the processing in mod_rewrite.
But after all that, and only limited success achieving what I wanted, I realized that what I really wanted was not to parse requests before WordPress had a chance at them (as would happen with rewrite rules), but to handle requests that WordPress’ internal rules couldn’t match.
What I ended up doing is writing a tiny plugin that hooked into the template_redirect hook. The short of it is that if WordPress thinks it’s 404′d, and I can divine some meaning from the requested URL, then I redirect to browser (including a HTTP/1.1 301 Moved Permanently statement). Voila, it works.
wordpress, rewrite, mod_rewrite, rewrite rules, apache rewrite, permalinks, redirect, 404
Posted April 19, 2007 by Casey Bisson
Categories: Technology. Tags: 404, apache rewrite, mod_rewrite, permalinks, redirect, rewrite, rewrite rules, wordpress.
9 Comments
Comments RSS
TrackBack Identifier URI
Leave a comment
User contributed tags for this post:
wordpress permalinks 404 (130) - wordpress mod_rewrite (120) - wordpress permalink 404 (105) - wordpress mod rewrite (55) - mod_rewrite leopard (50) - mod_rewrite wordpress (32) - leopard mod_rewrite (28) - rewrite wordpress (27) - mod rewrite 404 (25) - mod rewrite wordpress (22) - mod_rewrite 404 (22) - wordpress permalink mod_rewrite (22) - mod_rewrite 404 redirect (21) - mod_rewrite wordpress (20) - wordpress permalinks mod rewrite (19) - mod_rewrite redirect 404 (19) - wordpress permalinks mod_rewrite (19) - mod rewrite 404 redirect (17) - wordpress permalinks apache (17) - wordpress template_redirect (17) - mod rewrite avoid 404 processing (16) - wordpress mod_rewrite 404 (16) - mod_rewrite permalinks (16) - mod rewrite ErrorDocument (14) - mod rewrite permalinks (14) - permalinks mod_rewrite (14) - wordpress rewrite 404 (14) - wordpress permalink rewrite (13) - wordpress (12) - permalinks mod rewrite (12) - wordpress mod rewrite 404 (12) - wordpress permalinks 403 (12) - wordpress 404 mod_rewrite (12) - wordpress 403 (12) - wordpress permalink apache (12) - wordpress permalink 403 (11) - mod rewrite leopard (11) - permalink 404 (11) - mod_rewrite errordocument (11) - wordpress permalinks (10) - mod rewrite redirect 404 (10) - rewrite 404 (10) - wordpress internal rewrite (10) - F (10) - permalinks 404 (10) - wordpress apache2 (10) - wordpress 404 permalink (10) - time passing quote (9) - htaccess leopard (9) - mod_rewrite .htaccess wordpress (9) - wordpress 404 permalinks (9) - modrewrite wordpress (9) - mod_rewrite wordpress permalinks (9) - Wordpress permalinks 404 error (8) - permalinks 404 wordpress (8) - leopard htaccess (7) - wordpress permalinks broken (7) - mod_rewrite permalinks wordpress (7) - wordpress permalink apache2 (7) - permalink apache (7) - permalinks apache (7) - apache permalinks (7) - handle 404 with mod_rewrite (6) - wordpress 2 2 apache rewrite (6) - wordpress permalink mod rewrite (6) - wordpress avoiding 404 google permalinks (6) - wordpress rewrite (5) - wordpress rewrite rules (5) - mod rewrite html it (5) - WordPress 2 permalinks mod rewrite htaccess (5) - mod rewrite for wordpress permalinks (5) - ErrorDocument wordpress (5) - mod rewrite for wordpress (5) - mod rewrite wordpress permalinks (5) - ErrorDocument rewrite (5) - mod_rewrite wordpress 404 (5) - apache mod_rewrite wordpress (5) - mod rewrite 403 (5) - permalink 404 wordpress (5) - permalinks wordpress leopard (5) - wordpress 404 rewrite (5) - permalinks wordpress 404 (5) - wordpress permalink error 403 (5) - permalinks wordpress apache (5) - mod_rewrite error document (5) - mod_rewrite wordpress Permalink (5) - .htaccess wordpress leopard server (5) - mod_Rewrite 404 wordpress (5) - how to wordpress mod_rewrite (5) - wordpress apache permalink (5) - wordpress 404 subdirectory .htaccess (5) - errordocument mod rewrite (4) - apache rewrite 404 (4) - wordpress apache 2 2 rewrite (4) - permalink wordpress apache (4) - wordpress search redirect mod rewrite (4) - wordpress mod rewrite permalinks (4) - mod rewrite permalink (4) - rewrite wordpress 404 (4) - rewrite redirect 404 (4) - permalink mod rewrite (4) - leopard mod rewrite (4) - apache2 rewrite 404 (4) - mod_rewrite apache leopard (4) - wordpress permalink subdirectory (4) - mod rewrite apache2 leopard (4) - wordpress rewrite urls (4) - permalinks wordpress 403 (4) - wordpress permalink htaccess (4) - wordpress permalink broken (4) - wordpress mod_rewrite permalinks (4) - permalinks wordpress mac (4) - wordpress permalink error (4) - apache2 wordpress permalink (4) - permalink 403 (4) - .htaccess rewrite wordpress (4) - wordpress permalink 404 error (4) - htaccess wordpress 403 (4) - apache wordpress permalinks (4) - wordpress permalinks rewrite (4) - Permalink wordpress 404 (4) - wordpress 2.7 permalinks broken (4) - ErrorDocument and mod rewrite (3) - mod rewrite error The requested URL home gert public ht (3) - WordPress 2 permalinks (3) - wordpress and modrewrite (3) - wordpress permalink mod rewrite 403 (3) - mod rewrite blog (3) - wordpress avoid 404 on custom rewrite (3) - wordpress permalink rewrite problem (3) - wordpress permalink The requested URL (3) - mod rewrite wordpress 404 (3) - wordpress 404 redirect (3) - wordpress permalinks rewrite rules (3) - wordpress permalinks modrewrite (3) - mod rewrite fixing 404 (3) - apache2 mod rewrite wordpress (3) - wordpress leopard permalinks (3) - redirect 404 wordpress (3) - rewrite subdirectory (3) - wordpress rewrite apache2 (3) - wordpress permalink rss (3) - leopard modrewrite (3) - wordpress htaccess leopard (3) - mac leopard mod rewrite (3) - wordpress rewrite apache (3) - apache2 rewrite wordpress (3) - permalinks wordpress mod_rewrite (3) - htaccess permalinks (3) - mod rewrite apache leopard (3) -
hot damn, I would like to see this.
See it? It’s in use now.
Examples
The URL to this post
http://maisonbisson.com/blog/post/11617/
Some broken URLs to this post:
http://maisonbisson.com/blog/post/11617/wordpress-permalinks-mod_rewrite
http://maisonbisson.com/blog/post/11617/asdasdasd
Can you publish your code? I’m interested in this as well.
i need please a username n’ password of google earth pro
Can you explain a little bit more about what you did or show some code or anything?
I’m really interested because I’m having same kind of 404’s errors.
Thanks in advance.
Hi,
I would like to know the code what you implemented to redirect 404 by not invoking any query, as my site is going down often due to some ips accessing non existent urls. if you can provide me the code it would be a great help for me.
@smartdesis: the method discussed here likely creates additional load on the server for 404s. You might, however, be interested in this discussion: http://maisonbisson.com/blog/post/12035/wordpress-invalid-urls-extra-database-queries
Hi, on my wordpress, i have searched a lot, but not found any .htaccess file there, please tell me how wordpress do mode-rewite.
Thanks for the info - You totally helped me solve my problem. I spent hours on this,
so I decided to spend 20 mins and blog about .. here’s what i did exactly
http://chadnorwood.com/2008/12/02/wordpress-template_redirect/