web-dev-qa-db-fra.com

Comment puis-je rediriger tous les fichiers PDF dont le nom ne commence pas par "public" vers la page d'accueil?

Je souhaite désactiver l'accès direct à tous les fichiers PDF, à l'exception de ceux avec le préfixe public- au début du nom de fichier (par exemple, public-samplepdf.pdf) afin de pouvoir les visualiser en public. . Je voudrais rediriger tous les autres fichiers PDF vers ma page d'accueil.

Voici le code .htaccess que j'ai essayé, mais cela ne fonctionne pas. Que devrais-je faire à la place?

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

Cela semblerait faire le contraire (en quelque sorte) de ce que vous essayez de faire. Il redirige toute URL qui contient la chaîne "public-". Il doit correspondre à toute URL qui ne démarre pas dans le dernier segment de chemin et se termine par .pdf.

De plus, il ne doit pas s'agir d'une redirection 301 (permanente), sinon les utilisateurs qui ont déjà visité ces URL et qui ont été redirigés auront du mal à visiter l'URL lorsqu'ils sont autorisés à le faire (voir la note ci-dessous.[*1]).

Vous pouvez nier les expressions régulières dans mod_rewrite en les préfixant simplement avec !. Donc, !foo correspond à toute URL ne contenant pas "foo".

Essayez plutôt ce qui suit pour rediriger tous les fichiers .pdf non publics sur la page d’accueil:

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

Ceci redirige inconditionnellement chaque URL qui ne correspond pas au modèle donné. La classe de caractères [\w-] correspond aux caractères a-z, A-Z, 0-9, _ et -. Ainsi, seuls les caractères alphanumériques, ainsi que le trait de soulignement et le trait d'union sont autorisés dans les noms de fichiers PDF.

S'il ne doit rediriger que les demandes mappant vers un fichier réel, une condition supplémentaire est nécessaire (si vous placez ces directives en haut du fichier). Par exemple:

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

Ou bien, placez ces directives après le WordPress contrôleur avant.

Certains fichiers sont publics mais leurs fichiers ne peuvent pas être accessibles. mais lorsque vous vous êtes connecté, tous les fichiers sont accessibles

[*1] Bien que je ne sache pas comment vous espériez implémenter cela lorsque vous inconditionnellement redirigez toutes ces demandes dans .htaccess?


Un peu de côté, mais ... vous ne devriez pas normalement "bloquer" les demandes en redirigeant vers la page d'accueil. Et vous n'utiliseriez pas non plus mod_rewrite pour bloquer l'accès à des fichiers spécifiques du système de fichiers. mod_rewrite dans .htaccess traite principalement des URL, pas des chemins de système de fichiers.

Pour spécifiquement bloquer l'accès aux fichiers .pdf (c'est-à-dire servir un 403 interdit), mais autoriser public-.pdf Dans ce cas, vous utiliseriez mod_authz_core (Apache 2.4+) dans un conteneur <FilesMatch>. Par exemple:

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

La regex ci-dessus utilise un préfixe négatif pour faire correspondre tous les fichiers .pdf qui ne commencent pas par "public-".

3
MrWhite