WordPress mod_rewrite is canceling/overwriting my other mod_rewrite rule

in /www/ I have an .htaccess file containing:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^([^.]*.less)$ compilers/lessphp.php?file=$1 [R,QSA,L]
</ifModule>

This code works fine, until I’m requesting .less files in /www/blog/, where WordPress is located, and has its own .htaccess file which contains the standard pretty permalinks mod_rewrite:

Read More
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
</IfModule>

If I move WordPress’s mod_rewrite code to the root, and place it before my own mod_rewrite, everything works as expected:

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

# BEGIN LESSPHP
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^([^.]*.less)$ compilers/lessphp.php?file=$1 [R,QSA,L]
</ifModule>
# END LESSPHP

The annoyance here, is any modification in WordPress to do with permalinks means I need to remember to cut the .htaccess code from /www/blog/ and move it to the root.

Is there any way I can improve upon my mod_rewrite so WordPress isn’t overwriting it, and I can just leave everything where it is naturally placed? I would also rather not need to have two instances of my rule in both root and after WordPress’s. Also, WordPress’s mod_rewrite rules should be altered, since updating permalink settings will simply overwrite them.

Related posts

Leave a Reply

1 comment

  1. A quick fix could be to change the permissions on your .htaccess file so if you change settings in WordPress, it’ll show you what you need to manually change your .htaccess to since it won’t have direct write access to the file anymore.