views:

50

answers:

2

Sorry I couldn't come up with a better title.

Here is my htaccess

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

And this is my problem:

localhost/validpage gives me the contents of localhost/validpage.php. localhost/validpage/blah also gives me the same (validpage.php) page and so does localhost/validpage/blah/blah/... Therefore the problem I am facing is link duplicity(in my words!).

How do I allow localhost/validpage.php to be accessed from localhost/validpage only and nothing else, not even localhost/validpage.php.

I have started a question on ServerFault too but with not much success. The answer I have got is it cannot be done with htaccess alone.

By validpage I mean any valid page on the server. Since I am retrofitting an existing site with mod_rewrite for cleaner urls, I am looking for a relatively easy solution preferably with .htaccess only. However, any solutions are welcome.

+1  A: 

what is the source attribute of your images, etc ???
absolute or relative?

<img src="/images/my.jpg" /> and <img src="images/my.jpg" /> point to different files when applying your rewrite rules.

ChrisR
i can get around the problem by doing this. but I wanted to know why do I not get a 404
abel
if the answer doesn't make sense, it is because I have updated my question
abel
+1  A: 

You could try using this in your .htaccess

RewriteEngine on
RewriteBase /

# if request has a php extension remove and redirect
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^((.*)\.php)$
RewriteRule ^(.*).php$ $1 [L,R=301]

# if request uri has no extension link to php file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

I should rewrite your php scripts to friendly urls, and redirect requests using the .php extension.

Matt Barry
I get a page is not redirecting properly error in Firefox.
abel