views:

183

answers:

2

I need to block access to my entire site via IP Address except the url /api which should be open to all.

I am currently using ...

<LocationMatch /admin>
    Order Deny,Allow
    Deny from all
    Allow from [MY IP]
</LocationMatch>

this blocks access urls starting with /admin. But I want to block all urls except the ones that start /api.

Chris

A: 

Well you can first block the whole site, then simply allow /api.

<LocationMatch />
    Order Deny,Allow
    Deny from all
    Allow from [MY IP]
</LocationMatch>

<LocationMatch /api>
    Order Deny,Allow
    Allow from all
</LocationMatch>

Sorry I couldn't test it due to the way XAMPP is configured on my PC. Pray it works.

thephpdeveloper
Thanks but this didn't work, it blocked everything.
Chris Rowe
Did you try switching the order of the rules?
deizel
+1  A: 
RewriteEngine On # (only needs to happen once in .htaccess files.

RewriteBase /
RewriteCond %{REMOTE_ADDR} !^10\.103\.18\.104     # <--YOUR IP HERE
RewriteCond %{REQUEST_URI} !^/api    # page or directory to ignore                   
RewriteRule ^(.*)$ http://example.com/no_access.html [R=401] # where to send blocked requests
Eddie
Can't get this to work. I get an error 401 Authentication required.
Chris Rowe
Rewrite requires the use of additional module. would still be better to use core.
thephpdeveloper
@Chris - the code I supplied returns a 401 to the browser if your IP does not match. @Mauris - that is true. But not all users have access to the core config file. and rewrite works at a directory levelCompromise?Use location to lock down entire site (replace '/admin' with '/')Use additional location block to unlock /api (reverse deny,allow to allow all)
Eddie