web-dev-qa-db-fra.com

Lorsque j'ai plusieurs fichiers .htaccess entre plusieurs sites, quel est le fichier actif?

J'ai 4 sites hébergés avec le même fournisseur de services Internet. Les sites ont été modifiés sans cesse, et maintenant, j'ai plusieurs fichiers . Htaccess . L'un des est à la racine principale. Les autres sont répartis dans des endroits différents. Par exemple, ils apparaissent également à la racine de chaque URL.

Pour mieux l'expliquer, je vais appeler un site A et un second B. Maintenant, j'ai les fichiers . Htaccess :

  • Racine (avec .htaccess)
    • A + son propre .htaccess in public.html.
    • B + son propre .htaccess in public.html.

Je suppose que ces fichiers doivent être seulement à la racine oh le public.html. Ai-je raison?

2
Petrutech

Il n'y a pas un seul fichier "actif" .htaccess - c'est un peu plus complexe que cela. Sans savoir comment votre serveur est configuré ni ce qu'il y a réellement dans ces fichiers .htaccess, nous ne pouvons que supposer qu'ils sont tous "actifs". Ils travaillent tous ensemble.

Un fichier .htaccess est un fichier de configuration Apache par répertoire. Cela affecte le répertoire dans lequel se trouve le fichier .htaccess et l’ensemble de l’arborescence de répertoires située en dessous. Si le serveur le permet, tous les fichiers .htaccess situés le long du chemin du système de fichiers (auquel l’adresse URL correspond) sont traités, en commençant par le répertoire parent et en parcourant les sous-répertoires. Ainsi, dans votre exemple, le fichier .htaccess de la "Racine" sera traité avant le fichier .htaccess du répertoire public_html de A - si un fichier situé sous le répertoire public_html de A est demandé.

Cependant, différents modules sont traités indépendamment dans les fichiers de configuration, ce qui ne correspond pas nécessairement à l'ordre dans lequel les directives apparaissent dans un fichier .htaccess unique. Et la façon dont les directives sont "héritées" entre les fichiers parent/enfant .htaccess dépend également du module (mod_rewrite, en particulier, a ses propres règles à cet égard).

Je suppose que ces fichiers doivent être uniquement à la racine du public.html. Ai-je raison?

Ce serait un idéal. pour un entretien facile. Cependant, comme mentionné ci-dessus, ils peuvent survenir n'importe où. Selon ce que vous faites, il peut même ne pas être souhaitable d’avoir toutes les directives dans un fichier .htaccess commun à la racine. Mais vous ne devriez pas non plus disperser arbitrairement des directives sur le système de fichiers.

Si vous avez accès à la configuration du serveur, vous pouvez plus facilement consolider tous les fichiers .htaccess dans une seule configuration (dans un conteneur <VirtualHost>), éventuellement avec plusieurs conteneurs <Directory>.

1
MrWhite

Non, les fichiers .htaccess peuvent être n'importe où sur un site.

. Les fichiers htaccess (ou "fichiers de configuration distribués") permettent de modifier la configuration par répertoire . Un fichier, contenant une ou plusieurs directives de configuration, est placé dans un répertoire de document particulier et , les directives s’appliquant à ce répertoire et à tous ses sous-répertoires . (mon emphase)

https://httpd.Apache.org/docs/current/howto/htaccess.html

0
Steve

Je suis d'accord avec Steve, ce qu'il a souligné est correct. Le fichier .htaccess aurait une incidence sur le répertoire dans lequel il est placé. Cela étant dit, s'il existe un fichier .htaccess supplémentaire dans le sous-répertoire, les fichiers du sous-répertoire hériteront du fichier .htaccess situé dans le même répertoire et non dans le répertoire. Dossier Parent.

Comme mentionné par Steve dans sa réponse

Les fichiers .htaccess (ou "fichiers de configuration distribués") offrent un moyen de modifier la configuration par répertoire. Un fichier, contenant une ou plusieurs directives de configuration, est placé dans un répertoire de document particulier. Les directives s'appliquent à ce répertoire et à tous ses sous-répertoires.

Donc, juste pour répondre à votre question en prenant votre exemple lui-même


- Root // .htaccess in root will impact all files and sub-directories 
  |
  |-- A
    |- .htaccess // Since A has its .htaccess all files and sub-directories in A will inherit from this .htaccess file
  |  
  |-- B  // If B does not have .htaccess it will inherit from the Root directory which has one.

J'espère que cela t'aides !!

0
Manik