.htaccess: how to restrict access to a single file by IP?
Asked Answered
I

4

24

I've look all over, but keeps running into same info that talks about directory level IP restriction, which usually looks something like this:

Order Deny,Allow
Deny from all
Allow from 123.123.123.123

Is it possible to have same type of access restriction tied to a page/document?

Importation answered 30/8, 2010 at 21:53 Comment(0)
S
37

This will allow either someone from IP 127.0.0.1 or logged as a valid user. Stick it either in your config or .htaccess file.

    <Files learn.php>
        Satisfy any
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1

        AuthType Basic
        AuthName "private"
        AuthUserFile /var/www/phpexperts.pro/.htpasswd
        AuthGroupFile /dev/null
        Require valid-user
    </Files>

IP Alone:

    <Files learn.php>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Files>

That definitely answers your question.

Synesthesia answered 30/8, 2010 at 22:8 Comment(4)
Fastest answer response ever!Synesthesia
@TheodoreR.Smith : if I want to deny from one IP but allow from all others then what to write in htaccess?Beghtol
Change to Allow from all Deny from IP_ADDRESS.Synesthesia
@TheodoreR.Smith, I tried your code but I am getting Access forbidden! from my ip address. I have to access the service.php page from my single ip. <Files service.php> Order deny, allow Deny from all Allow from 0.0.0.0 </Files> prnt.sc/vtkknwHerrle
C
9

I think the directive needs to be:

Order deny,allow

for the answer above to work (at least for the IP Alone solution).

Carper answered 3/5, 2012 at 12:32 Comment(1)
How to block an organization to open my website from their PCs ? They have 10 PCs connected on LAN and they need to access my website from only 5 of their PCs and block on the other 5? How do I achieve this?Beghtol
B
1

Mod-rewrite based solution :

RewriteEngine on

RewriteCond %{REMOTE_ADDR} !^Y\.O\.U\.R\.IP$
RewriteRule ^file\.php$ - [F,L]

The rewriteRule above will deny all requests to file.php if client ip does not match the ip address in the RewriteCond's pattern

Boonie answered 21/6, 2016 at 15:28 Comment(2)
This answer is not clear to implement for many developers.Markowitz
@Markowitz Could you please explain what's not clear in my answer? This is a mod-rewrite solution to protect a file from an ip address and it's the easiest , fastest,and safest way to do so.Boonie
M
1

For a more up to date Apache 2.4 example:

<Files file.html>
    Require ip 123.123.123.123
</Files>

Here are the more in depth docs for additional options and examples: https://httpd.apache.org/docs/2.4/howto/access.html and the docs for the <Files> directive: https://httpd.apache.org/docs/2.4/mod/core.html#files

Note that <Files> can be nested inside <Directory> sections to restrict the portion of the filesystem they apply to.

Medium answered 12/9, 2019 at 21:59 Comment(1)
is this still current?Jabe

© 2022 - 2024 — McMap. All rights reserved.