Brad Sullivan
Brad Sullivan

Reputation: 127

How to add/ignore a subfolder in htaccess file?

I have build an app at http://url/sdf19/

I have a .htaccess placed in /sdf19/ containing RewriteRule for clean urls.

But I have built a PDF generating tool, which is in a subfolder /inc/tools. I need to link to it direct to run before headers.

Despite a few hours of searching, trying snippets, generators, etc. I cannot get any request to http://url/sdf19/inc/tools to be allowed, without the existing RewriteRule set taking over

Here is my starting file

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-z]+)\/?$ index.php?page=$1 [NC]
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&id=$2 [NC]
RewriteRule ^([a-z]+)\/([a-z]+)\/?$ index.php?page=$1&action=$2 [NC]
RewriteRule ^([a-z]+)\/([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&action=$2&id=$3 [NC]

I've tried to add this on line 4; RewriteCond %{REQUEST_URI} !^ inc/tools/ [NC] This gave RewriteCond: bad argument line error

I've tried to add this to line 2;

RewriteCond %{REQUEST_URI} ^/inc/tools/(.*)$
RewriteRule ^.*$ - [L]

Desired result is that I can allow direct access to http://url/sdf19/inc/tools > everything I have tried so far i get redirected to base http://url/sdf19/

Upvotes: 0

Views: 175

Answers (1)

Emma
Emma

Reputation: 27723

Maybe, we could step by step solve this problem. First step, we might just want to make something work with as less as boundaries that'd be possible.

Let's design a low boundary expression, maybe something similar to:

(.+)(\/inc\/tools)

From here, we can just add \/inc\/tools to the RewriteCond, just for testing. Later, we can modify that.


RegEx

If this wasn't a desired expression, you can modify/change your expressions in regex101.com.

RegEx Circuit

You can also visualize your expressions in jex.im:

enter image description here

RewriteRule Test

You can test your RewriteRules in htaccess.madewithlove.be.

I'm not so sure about the rest of RewriteRules, but I'm assuming they are working fine and not conflicting with the new one. Maybe, this or something similar would work:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} \/inc\/tools  [NC]
    RewriteRule ^(.*)$ $1 [L]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^([a-z]+)\/?$ index.php?page=$1 [NC]
    RewriteRule ^([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&id=$2 [NC]
    RewriteRule ^([a-z]+)\/([a-z]+)\/?$ index.php?page=$1&action=$2 [NC]
    RewriteRule ^([a-z]+)\/([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&action=$2&id=$3 [NC]

</IfModule>

Upvotes: 1

Related Questions