Ich habe dies in meinem Zugriff, kann aber nicht herausfinden, wofür es ist. Aufgrund der Art der Regel hilft die Suche auch nicht.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Kann jemand bitte erklären, wofür es ist?
linux
apache-2.2
apache-2.4
.htaccess
mod-rewrite
Richard1984
quelle
quelle
/
endet und kein ".
" enthält, leiten Sie die Anforderung um, indem Sie sie mit a anhängen/
. Die wahrscheinliche Absicht dieser Regel besteht darin, die automatische Verzeichnisindizierung durchzuführen.Antworten:
Alles, was diese Regel bewirkt, ist,
/
Ihren URLs ein Trailing hinzuzufügen, wenn es keine gibt und wenn es keine.
in der URI gibt,https://example.org/test
wird diese umgeleitethttps://example.org/test/
, aberhttps://example.org/test.html
nicht umgeschriebenhttps://example.org/test.html/
(aber Hinweis:https://example.org/test.case/folder
wird auch nicht umgeleitet,https://example.org/test.case/folder/
wie sie enthält a.
in der URI).quelle
/test.case/folder
wird auch nicht umgeleitet" - Kleiner Punkt, aber wenn "Ordner" ein Dateisystemverzeichnis ist, gibt mod_dir (standardmäßig) eine 301-Umleitung aus, um einen abschließenden Schrägstrich anzuhängen. Es ist nur dann ein Problem, wenn es/test.case/some-other-virtual-url
einen abschließenden Schrägstrich geben sollte.Ohne zu validieren, aber unter Verwendung meiner Erfahrung beim Umschreiben von Apache, scheint diese Konfiguration:
Dies führt zu den folgenden Testfällen
/ -> / /test -> /test/ /my/resource -> /my/resource/ /my/resource.type -> /my/resource.type /edge.case/resource -> /edge.case/resource
Ich denke, die Regel hat den Zweck, Ressourcen, die keine Datei zu sein scheinen, Schrägstriche hinzuzufügen, aber einen Randfall zu haben.
Wenn Sie einer Ressource nicht mit '.' Einen Schrägstrich hinzufügen. (Punkt-) Zeichen im Nicht-Datei-Teil des Pfads, in den der reguläre Ausdruck geändert werden soll:
quelle
!(\/$|\.[^\/]*)
- Ihre aktualisierte Regex ist wirklich nicht anders. Sie benötigen auch einen Anker am Ende der Schnur im 2. Teil (der zur Erweiterung passt). Vielleicht so etwas wie:!(/|\.[a-zA-Z]+)$
(keine Notwendigkeit, den Schrägstrichen zu entkommen).