J'ai ceci dans mon htaccess mais je ne peux pas comprendre à quoi ça sert. En raison de la nature de la règle, la recherche n'aide pas non plus.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Quelqu'un peut-il expliquer à quoi cela sert?
linux
apache-2.2
apache-2.4
.htaccess
mod-rewrite
Richard1984
la source
la source
/
et qu'elle ne contient pas de ".
", redirigez la demande en l'ajoutant avec un/
. L'intention probable de cette règle est de gérer l'indexation automatique des répertoires.Réponses:
Tout ce que cette règle fait, c'est d'ajouter une fin
/
à votre URL s'il n'y en a pas et s'il n'y en a pas.
dans l'URI, ellehttps://example.org/test
sera donc redirigée vershttps://example.org/test/
, maishttps://example.org/test.html
ne sera pas réécrite vershttps://example.org/test.html/
(mais remarque:https://example.org/test.case/folder
ne sera pas non plus redirigée vershttps://example.org/test.case/folder/
car elle contient a.
dans l'URI).la source
/test.case/folder
ne sera pas non plus redirigé" - Point mineur, mais si "dossier" est un répertoire de système de fichiers, alors mod_dir émettra (par défaut) une redirection 301 pour ajouter une barre oblique de fin. Ce n'est un problème que si cela/test.case/some-other-virtual-url
doit avoir une barre oblique.Sans valider, mais en utilisant mon expérience en réécriture Apache, cette configuration semble:
Cela se traduira par les cas de test suivants
/ -> / /test -> /test/ /my/resource -> /my/resource/ /my/resource.type -> /my/resource.type /edge.case/resource -> /edge.case/resource
Je pense donc que la règle a pour but d'ajouter des barres obliques aux ressources qui ne semblent pas être un fichier, mais il semble avoir un cas de bord.
Si vous n'ajoutez pas de barre oblique à une ressource avec '.' (point) dans la partie non fichier du chemin d'accès, l'expression régulière doit être remplacée par:
la source
!(\/$|\.[^\/]*)
- Votre regex mis à jour n'est vraiment pas différent. Vous avez également besoin d'une ancre de fin de chaîne sur la 2ème partie (qui correspond à l'extension). Peut-être quelque chose comme:!(/|\.[a-zA-Z]+)$
(pas besoin d'échapper aux barres obliques).