Si je définis Quelqu'un pourrait-il expliquer pourquoi? Voici mon DirectorySlash désactivé code> dans mon
.htaccess code> et appelez le répertoire sans strong> la barre oblique de fuite, je reçois un
403- Interdit code> de mon serveur. Si je l'appelle avec Slash, tout fonctionne bien.
.htaccess code>: p>
4 Réponses :
Je pense que parce que lorsque vous désactivez la déglayage des répertoires, il désactive l'autocorrection de l'URL et tente d'afficher la liste de répertoires, mais heureusement, vous avez probablement hérité de cela quelque part (ou dans les autorisations de fichier) afin qu'il envoie un 403-interdit. Je suppose que lorsque vous allumez-le, cela fonctionne normalement. D'après ce que je comprends de la documentation, il n'est pas très bon d'utiliser les répertoires de répertoires pour la sécurité. http://httpd.apache.org/docs/2.1/mod/mod_dir. HTML P>
Laurent, merci pour votre réponse. J'ai lu l'avertissement de sécurité B> dans les documents Apache, mais j'ai besoin de comprendre ce qui s'est mal passé ici. À la manière dont la liste des répertoires est par défaut désactivé à mon backend WebHost.
Vous rewritebase est / dossier / code> Vous avez donc besoin de la barre oblique de fin de l'URL pour correspondre. Vous pouvez la définir sur
/ dossier code> et je pense que cela devrait fonctionner sans la barre oblique finale.
Je reçois aussi un 403 si je suis votre suggestion.
Comme vous le savez par la documentation, lorsque Cependant, il a été programmé avec une prise de conscience des modules tels que La requête passe ensuite à la phase de génération de contenu, qui, étant donné que la demande n'a pas été mappée sur un fichier réel. , est géré par note que depuis ne correspondrait pas, car le Activation de DirectorySlash code> est défini sur
OFF CODE>, Demandes to
/ Dossier CODE> N'A PAS
DIGLAGEINDEX < / code> évalué. Cela signifie que la demande ne sera pas automatiquement mappée sur
/folder/index.php code>.
mod_dir code> exécute cette vérification de la phase "Fixup" du traitement de la demande.
mod_rewrite code>, qui est responsable de vos définitions code> Rewriterule code>, exécute également son traitement dans cette phase lorsque vous spécifiez les règles dans un fichier
.htaccess code>. < / p>
mod_dir code> et inclut un chèque pour vous assurer que le répertoire actuel a été demandé avec une barre oblique de fuite. Sinon, il décline de gérer la demande, car cela pourrait entraîner un comportement indéfini. P>
mod_autoindex code>. Étant donné que
index code> est désactivé sur votre hôte par défaut,
mod_autoindex code> renvoie
403 interdit code> qui est ce que vous voyez. P>
DirectoryIndex code> n'est pas évalué, même si
mod_rewrite code> était em> pour traiter la demande, il échouerait toujours, car aucune résolution automatique, car aucune résolution auto > index.php code> se produirait et votre règle p>
. code> nécessite une correspondance sur quelque chose ( mais la demande serait vide). p>
DirectorySlash code> Empêche ce scénario en corrigeant les actions évitées dans tous les scénarios mentionnés précédemment, à l'exception de la dernière note, qui est prise en charge par Le fait que
DirectoryIndex code> mappe la requête sur
index.php code> de toute façon. p> p>
Merci beaucoup! Facile à comprendre aussi, si j'ai lu votre réponse.
Mais que si nous voulons obscurcir notre structure de répertoire et utiliser toujours mod_rewrite code> pour chaque demande? Disons que j'ai un site avec un répertoire
/ privé code>. Apache me redirigerait vers
/ privé / Code> Si je demande
/ privé code> si
répertoiresLash code> est
sur code>, laissant ainsi la divulgation de l'information Prendre. Et si je veux juste envoyer
/ privé code> à mon
index.php code> contrôleur avant?
avec Apache 2.4 Vous pouvez autoriser des réécroissements dans les fichiers .htaccess en définissant voir Documentation Apache de mod_rewrite P> P> réécritoption allownoslash code>.
Comme Tom déjà répondu, il existe une option spéciale pour réécritoptions, mais uniquement pour Apache 2.3.16+, donc si vous, comme moi, avez une amache de la version plus ancienne, vous ne pouvez pas réécrire l'URL pour le même répertoire, car Apache Ne sait pas sur ce répertoire.
Exemple:
"Obtenir / Somedir" pointera sur Ainsi, j'ai trouvé un seul Solution pour moi - Utilisation des alias: P>
/ var / www / html / public / somedir / code > - Ceci est une logique Crazy Apache. Et Apache vous montrera 503 (sans options + index) ou une liste de répertoires (sinon) avec de mauvaises URL telles que / SubDir / au lieu de / SOMEDIR / SUBDIRE / P>
AliasMatch "/somedir$" "/var/www/html/public/somedir/index.html"