J'essaie de restreindre une URL spécifique à être disponible en dehors du réseau uniquement à des adresses IP spécifiques. Lorsqu'un utilisateur extérieur essaie d'accéder à cette URL et non à partir de la liste des adresses IP, il doit être redirigé vers la page d'accueil.
C'est ce que j'ai essayé jusqu'à présent sans aucune chance. La dernière partie, il redirige tout le monde vers la page d'accueil, quelle que soit l'IP.
<Location "/secret">
# <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
# Redirect 303 "/secret" /
# </If>
RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]
LogLevel debug rewrite:trace6
</Location>
PS: l'URL/secret est en fait une URL virtuelle et n'existe pas physiquement sur le lecteur.
Utilisez Order
, Deny
et allow
pour spécifier qui a accès à votre vhost ou emplacement.
<VirtualHost *:80>
ServerName example.net
DocumentRoot /docroot
<Directory "/docroot">
Order Deny,Allow
Deny from all
Allow from 10.10.10.10
Allow from 10.10.11.0/24
</Directory>
</VirtualHost>
Quand il s'agit de rediriger, pensez à un page d'erreur personnalisée . Ceci est beaucoup plus général, car chaque accès non autorisé doit provoquer une erreur 403 et peut donc être évalué facilement.
Je n'ai jamais fait cela avec Apache, mais utilisez cette stratégie avec nginx. Pour Apache, quelque chose comme ça devrait faire:
ErrorDocument 403 http://homepage.example.com
Les documents d'erreur personnalisés sont configurés à l'aide de la directive ErrorDocument, qui peut être utilisée dans un contexte global, virtualhost ou répertoire. Il peut être utilisé dans les fichiers .htaccess si AllowOverride est défini sur FileInfo. (à partir des documents Apache)
Les options Ordre, Refuser et Autoriser ont été remplacées dans Apache 2.4 par
<Directory /var/www/mysite.com/htdocs/public>
Require all granted
</Directory>
Vous pouvez restreindre explicitement les adresses en utilisant les éléments suivants:
<Directory /var/www/mysite.com/htdocs/public>
Require all granted
Require not ip 192.168.0.1
</Directory>
L'inverse est également vrai, pour tout restreindre et autoriser uniquement un sous-ensemble à utiliser ce qui suit:
<Directory /var/www/mysite.com/htdocs/public>
Require Host example.com
Require ip 192.168.0.1
</Directory>
Plus d'informations sont disponibles sur le documentation de contrôle d'accès Apache 2.4.
En ce qui concerne votre question (édité la mienne en raison d'un manque de points pour ajouter un commentaire), vous devriez pouvoir simplement définir un ErrorDocument avec l'index défini comme chemin URL:
<Directory /var/www/mysite.com/htdocs/public>
Require Host example.com
Require ip 192.168.0.1
ErrorDocument 401 /index.html
</Directory>
J'espère que cela t'aides!
Pour Apache 2.4, vous pouvez utiliser <RequireAny>. Vous pouvez le faire dans un fichier vhost ou .htaccess ....
SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
Require env AllowThisIP
Require Host example.com
</RequireAny>
Documents Apache https://httpd.Apache.org/docs/2.4/mod/mod_authz_core.html#requireany