2010-12-09 5 views
119

J'essaye de tout refuser et de n'autoriser qu'une seule adresse IP. Mais, je voudrais avoir le htaccess suivant travaillant pour cette adresse IP unique. Je ne trouve pas un moyen d'avoir à la fois travail: Deny tous et ne permettent qu'un seul, ainsi que les options suivantes:Refusez tout, n'autorisez qu'une seule adresse IP via htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    #Removes access to the system folder by users. 
    #Additionally this will allow you to create a System.php controller, 
    #previously this would not have been possible. 
    #'system' can be replaced if you have renamed your system folder. 
    RewriteCond %{REQUEST_URI} ^system.* 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 

    #When your application folder isn't in the system folder 
    #This snippet prevents user access to the application folder 
    #Submitted by: Fabdrol 
    #Rename 'application' to your applications folder name. 
    RewriteCond %{REQUEST_URI} ^application.* 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 

    #Checks to see if the user is attempting to access a valid file, 
    #such as an image or css document, if this isn't true it sends the 
    #request to index.php 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
    # If we don't have mod_rewrite installed, all 404's 
    # can be sent to index.php, and everything works as normal. 
    # Submitted by: ElliotHaughin 

    ErrorDocument 404 /index.php 
</IfModule> 

Est-il un moyen de faire ce travail?

Répondre

277
order deny,allow 
deny from all 
allow from <your ip> 
+0

Cela a fonctionné pour moi, merci! –

+69

REMARQUE! Apache est sensible aux espaces dans htaccess. Ne laissez aucun espace entre refuser, autoriser. Je n'écris pas l'ordre refuser, autoriser. – Rabiees

+2

INFO: - cela fonctionne aussi pour IPv6! il suffit d'ajouter une autre ligne avec 'autoriser à partir de votre IPv6' –

28

version légèrement modifiée de ce qui précède, y compris une page personnalisée à afficher à ceux qui se voit refuser l'accès:

ErrorDocument 403 /specific_page.html 
order deny,allow 
deny from all 
allow from 111.222.333.444 

... et de cette façon ces demandes ne vient pas de 111.222.333.444 sera voir specific_page.html

(affichant ce commentaire comme avait l'air terrible, parce que de nouvelles lignes se perdent)

+0

Salut. J'ai exactement le même code que celui que vous avez dans mon .htaccess mais je reçois toujours une erreur 500. La page que j'ai spécifiée s'appelle 'test.html' et se trouve dans le même dossier que' .htaccess'. Cependant, je ne peux pas voir les journaux (non autorisés sur le serveur). Avez-vous une idée de pourquoi je pourrais avoir ce problème? Quand je reçois le chemin du fichier via un client ftp, il me dit '/ test.html' donc le chemin ne devrait pas poser de problème, non? – Musterknabe

+0

En outre, l'erreur 500 vient même quand j'ai la ligne avec le commentaire errordocument. Cela ne devrait donc pas être le problème. Y a-t-il une raison pour que les 3 autres lignes ne fonctionnent pas? Dans mon .htaccess J'ai trois lignes de plus, où je redirige non www vers www, mais c'est tout. Mais j'obtiens aussi l'erreur quand j'ai SEULEMENT les trois lignes avec le refus, l'autorisation, etc. – Musterknabe

38

cela peut être amélioré en utilisant la directive conçue pour tha t tâche.

ErrorDocument 403 /specific_page.html 
Order Allow,Deny 
Allow from 111.222.333.444 

Où 111.222.333.444 est votre adresse IP statique. Lors de l'utilisation de la directive "Ordre Autoriser, Refuser", les demandes doivent correspondre à Autoriser ou Refuser. Si aucune des deux n'est satisfaite, la demande est refusée.

http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order

2

Vous pouvez utiliser ce qui suit dans htaccess pour permettre et refuser l'accès à votre site:

SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1 

Order deny,allow 
deny from all 
allow from env=allowedip 

Nous avons d'abord définir une variable d'env allowedip si l'adresse IP du client correspond au modèle, Si le modèle correspond, la variable d'environnement allowedip reçoit la valeur . Dans l'étape suivante, nous utilisons Autoriser, refuser les directives pour autoriser et refuser l'accès au site. Order deny,allow représente l'ordre de deny et allow. deny from all cette ligne indique au serveur de refuser tout le monde. la dernière ligne allow from env=allowedip permet d'accéder à une adresse IP unique pour laquelle nous avons défini la variable d'environnement.

Remplacez 1\.2\.3\.4\.5 par votre adresse IP autorisée.

refrences:

+1

Quels sont les avantages de l'employer au lieu de juste permettre de 324.234.22.1? –

50

Je sais que cette question a déjà une réponse acceptée, mais le Apache documentation dit:

Les directives Allow, Deny et Order, fournies par mod_access_compat, sont obsolètes et disparaîtront dans une future version.Vous devriez éviter en les utilisant, et éviter les tutoriels périmés recommandant leur utilisation.

Ainsi, une réponse plus à l'épreuve serait:

<RequireAll> 
    Require ip xx.xx.xx.xx yy.yy.yy.yy 
</RequireAll> 

Si tout va bien, je l'ai aidé à prévenir cette page de devenir l'un de ces « tutoriels dépassés ». :)

+0

Où mettons-nous notre adresse IP? –

+0

Oui Cela fonctionne très bien. – Sadee

+0

Way to go! Cela devrait être une solution acceptée, car cela fonctionne non seulement mais aussi à l'épreuve du temps. – 6opko

5

un peu plus l'amélioration des réponses précédentes:

ErrorDocument 403 /maintenance.html 
Order Allow,Deny 
Allow from #.#.#.# 

Où:

0

Si oui u veulent utiliser mod_rewrite pour le contrôle d'accès, vous pouvez utiliser condition comme agent utilisateur, http referrer, adr à distance, etc.

Exemple

RewriteCond %{REMOTE_ADDR} !=*.*.*.* #you ip address 
RewriteRule ^$ - [F] 

refrences:

1

Je n'étais pas en mesure d'utiliser la méthode 403 parce que je voulais la page de maintenance et les images de la page dans un sous-dossier sur mon serveur, donc utilisé le suivant approche de rediriger vers une page de maintenance »pour tout le monde, mais une seule adresse IP *

RewriteEngine on 
RewriteCond %{REMOTE_ADDR} !**.**.**.* 
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L] 

Source: Creating a holding page to hide your WordPress blog

0

Vous pouvez avoir plus d'un IP ou même un autre type de permettre comme l'utilisateur, le nom d'hôte,. .. plus d'infos ici https://www.askapache.com/htaccess/setenvif/

SetEnvIf remote_addr ^123.123.123.1$ allowedip=1 
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1 
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1 
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1 

Order deny,allow 
deny from all 
allow from env=allowedip