fent
fent

Reputation: 18205

How do I make .htaccess work on the current directory and not subdirectories?

I'm using mod rewrite to access my PHP files in the root directory of my website indirectly. Currently, I have something like this,

RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]

But what I would like to use is

RewriteRule ^(.*)$ /$1.php [L]

So that I wouldn't have to update my .htaccess file whenever I wanna add a new page to my website. The problem with this however is that it affects my subdirectories too. Which makes CSS, javascript, images unaccessable because it redirects to "/dir/example.png.php".

So what is the best solution here?

Upvotes: 4

Views: 7490

Answers (4)

Gumbo
Gumbo

Reputation: 655359

Try this rule:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule .* $0.php [L]

Upvotes: 5

random
random

Reputation: 9955

Edit the .htaccess to this:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1.php [L]

After starting the rewrite engine, it will first check to see if the requested file is an actual file on the system, or if it is actually a directory. If it is neither of those, it will execute the rule, which in this case is to try and find the file by appending .php and serving that up.

Subdirectories, images, CSS and the like will be fine because they will step out of the rewriting once they are found.

Upvotes: 3

Cfreak
Cfreak

Reputation: 19309

I'd do it with filters to ignore sub-directories. That way you only have to change it if you add a sub folder. You'll need to add a line like Sosh's if you have images or other files in the folder

The following would ignore "images" and "js" sub folders and redirect everything else

RewriteRule   ^images*   -  [L]
RewriteRule   ^js*       -  [L]
RewriteRule   ^(.*)$     /$1.php   [L]

Upvotes: 2

UpTheCreek
UpTheCreek

Reputation: 32391

Something like this (note the !):

RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php

Upvotes: -1

Related Questions