Utilisation de htaccess pour bloquer l'accès à un sous-domaine et à tous les fichiers et dossiers de ce sous-domaine
J'ai un domaine principal et une configuration de site Web sur mon hébergement cPanel ainsi qu'un domaine complémentaire avec son propre site Web séparé : domain.com et addon.com
En raison de la manière dont cPanel configure les domaines complémentaires, le site Web du domaine complémentaire est accessible via le domaine principal :
addon.domain.com/
domaine.com/addon/
Ce que j'aimerais faire, c'est bloquer tout accès au site Web du domaine complémentaire à partir du domaine principal, y compris tous les fichiers ou dossiers qu'il contient, donc :
- L'accès à addon.com/anyfolder/anyfile.php fonctionne, mais ;
- Accéder à addon.domain.com/anyfolder/anyfile.php ou
- L'accès à domain.com/addon/anyfolder/anyfile.php échoue avec une erreur 404.
J'ai réussi à modifier le fichier htaccess du domaine complémentaire pour y parvenir, par exemple en utilisant ceci dans le htaccess du domaine complémentaire :
RewriteEngine on
RedirectMatch 404 ^/addon/(.*)$
Bloque parfaitement domain.com/addon/anyfolder/anyfile.php, affichant une erreur 404.
However I have tried various methods to do the same for addon.domain.com and although I can usually get it to display a 404 when accessing only the domain, for any folders or files (addon.domain.com/anyfolder/anyfile.php) it will still work with no error and I can't figure out how to go about correcting this with htaccess.
Par example:
RewriteEngine on
RewriteCond %{HTTP_REFERER}!^https?://(www\.)addon\.com
RewriteRule ^(.*)$ - [L,R=404]
Cela fait que addon.domain.com affiche l'erreur 404 souhaitée, mais addon.domain.com/anyfolder/anyfile.php fonctionne toujours sans problème.
Ce n'est qu'un exemple bien sûr, j'ai en fait cherché pendant un certain temps et essayé plusieurs conditions de réécriture différentes entre autres pour obtenir le résultat souhaité sans succès. Autre exemple qui ne fonctionne que pour le domaine :
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?addon.domain.co.uk$ [NC]
RewriteRule ^(.*)$ - [L,R=404]
Encore une fois, cela amène addon.domain.com à afficher l'erreur 404 souhaitée, mais addon.domain.com/anyfolder/anyfile.php fonctionne toujours.
La seule autre chose que je peux penser à faire est de modifier la zone DNS du domaine principal et de supprimer (ou de casser d'une manière ou d'une autre) l'enregistrement A du sous-domaine. Cela entraînerait bien sûr une erreur "serveur introuvable" qui aurait l'effet souhaité, mais je ne peux pas imaginer que ce soit une option conseillée à prendre.
Solution du problème
Vous devriez faire quelque chose comme ce qui suit en utilisant mod_rewrite près du haut du .htaccess
fichier à la racine du sous-domaine.
Je suppose addon.com
que www.addon.com
les deux doivent être accessibles.
Par example:
RewriteEngine On
RewriteCond %{HTTP_HOST}!^(www\.)?addon\.com$
RewriteRule ^ - [R=404]
Ce qui précède bloquera (servira un 404 Not Found) pour toute demande qui n'est pas pour addon.com
(ou www.addon.com
). Le !
préfixe sur le CondPattern nie l'expression. N'importe quel chemin d'URL.
Vous n'avez pas besoin de l' L
indicateur lorsque vous utilisez un code de retour dans la plage 4xx.
MISE À JOUR : Méthode alternative
Une approche alternative qui n'utilise pas mod_rewrite, donc ne sera pas nécessairement remplacée par .htaccess
des fichiers dans des sous-répertoires :
<If "%{HTTP_HOST}!~ /^(www\.)?addon\.com$/">
Require all denied
</If>
Cela utilise une expression Apache avec mod_authz_core.
Ce qui précède servira un 403 Forbidden pour toutes les demandes qui ne sont pas pour le domaine addon.
Un regard sur vos règles...
RewriteEngine on
RedirectMatch 404 ^/addon/(.*)$
RedirectMatch
est une directive mod_alias. Ceci n'a aucun rapport avec la RewriteEngine
directive qui initialise mod_rewrite.
RewriteCond %{HTTP_REFERER}!^https?://(www\.)addon\.com
RewriteRule ^(.*)$ - [L,R=404]
Cela permet addon.domain.com
d'afficher l'erreur 404 souhaitée, mais
addon.domain.com/anyfolder/anyfile.php
fonctionne toujours sans problème.
Ceci vérifie l' en-tête (le site d'Referer
où vous venez ), donc cela n'aura pas le résultat souhaité. Cependant, une demande de devrait toujours être bloquée par cette règle.addon.domain.com/anyfolder/anyfile.php
Notez que l'ordre des directives dans le .htaccess
fichier peut être important. Toutes les directives de blocage doivent se trouver en haut du fichier de configuration.
Autre exemple qui ne fonctionne que pour le domaine :
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?addon.domain.com$ [NC]
RewriteRule ^(.*)$ - [L,R=404]
Encore une fois, cela provoque addon.domain.com
l'affichage de l'erreur 404 souhaitée, mais addon.domain.com/anyfolder/anyfile.php
fonctionne toujours.
Cela devrait bloquer addon.domain.com/anyfolder/anyfile.php
(avec ou sans le sous-domaine www) - à moins que la règle ne soit placée au mauvais endroit et qu'elle soit en conflit avec d'autres règles, comme mentionné ci-dessus.
Notez que vous n'avez pas nécessairement besoin d'avoir une seule règle. Parfois, deux règles ou plus peuvent effectuer le travail aussi efficacement qu'une seule.
Commentaires
Enregistrer un commentaire