it-swarm.com.de

Wie kann ich alle PDF Dateien mit Dateinamen, die nicht mit "public" beginnen, auf die Homepage umleiten?

Ich möchte den direkten Zugriff auf alle PDF Dateien außer denen mit dem Präfix public- am Anfang des Dateinamens deaktivieren (z. B. public-samplepdf.pdf), damit sie öffentlich angezeigt werden können . Ich möchte alle anderen PDF Dateien auf meine Homepage umleiten.

Hier ist der von mir ausprobierte .htaccess-Code, der jedoch nicht funktioniert. Was soll ich stattdessen tun?

RewriteRule ^(.+/)?public-(.*) /redirect-url/ [R=301,L]
4
Dherell
_RewriteRule ^(.+/)?public-(.*) /redirect-url/ [R=301,L]
_

Dies scheint das Gegenteil von dem zu sein, was Sie versuchen. Es leitet jede URL um, die enthält ​​den String "public-". Es muss mit jeder URL übereinstimmen, die nicht ​​"public-" im letzten Pfadsegment startet und außerdem mit _.pdf_ endet.

Dies sollte auch keine (permanente) 301-Weiterleitung sein, da Benutzer, die zuvor diese URLs besucht haben und weitergeleitet wurden, Schwierigkeiten haben, die URL zu besuchen, wenn sie dazu berechtigt sind (siehe Hinweis unten)[* 1]).

Sie können negieren reguläre Ausdrücke in mod_rewrite, indem Sie ihnen einfach _!_ voranstellen. Also würde _!foo_ mit jeder URL übereinstimmen, die nicht "foo" enthält.

Versuchen Sie stattdessen Folgendes, um alle nicht öffentlichen _.pdf_ -Dateien auf die Homepage umzuleiten:

_RewriteRule !^(.+/)?public-[\w-]\.pdf$ / [R,L]
_

Dadurch werden alle URLs, die nicht mit dem angegebenen Muster übereinstimmen, bedingungslos umgeleitet. Die Zeichenklasse _[\w-]_ entspricht den Zeichen _a-z_, _A-Z_, _0-9_, ___ und _-_. Daher sind in Ihren PDF Dateinamen nur alphanumerische Zeichen sowie Unterstriche und Bindestriche zulässig.

Wenn nur Anforderungen umgeleitet werden sollen, die einer tatsächlichen Datei zugeordnet sind, benötigen Sie eine zusätzliche Bedingung (wenn Sie diese Anweisungen oben in der Datei platzieren). Zum Beispiel:

_RewriteCond %{REQUEST_FILENAME} -f
RewriteRule !^(.+/)?public-[\w-]\.pdf$ / [R,L]
_

Oder platzieren Sie diese Anweisungen nach dem WordPress Front-Controller.

Einige Dateien sind öffentlich, aber auf ihre Dateien kann nicht zugegriffen werden. aber wenn Sie angemeldet sind, sind alle Dateien zugänglich

[* 1] Obwohl ich nicht weiß, wie Sie das umsetzen wollten, wenn Sie bedingungslos all diese Anfragen in _.htaccess_ umleiten?


Etwas abseits, aber ... Sie sollten Anfragen normalerweise nicht "blockieren", indem Sie auf die Homepage umleiten. Und Sie würden mod_rewrite auch nicht verwenden, um den Zugriff auf bestimmte Dateien im Dateisystem zu blockieren. mod_rewrite in _.htaccess_ befasst sich hauptsächlich mit URLs, nicht mit Dateisystempfaden.

Um speziell block auf _.pdf_ -Dateien zuzugreifen (d. H. Eine 403 Forbidden-Datei zu bedienen), aber _public-.pdf_ -Dateien zuzulassen, würden Sie mod_authz_core (Apache 2.4+) verwenden in einem _<FilesMatch>_ Container. Zum Beispiel:

_<FilesMatch "^(?!public-).+\.pdf$">
Require all denied
</FilesMatch>
_

Die obige Regex verwendet einen negativen Lookahead für alle _.pdf_ -Dateien, die nicht mit "public-" beginnen.

3
MrWhite