web-dev-qa-db-fra.com

Rediriger l'utilisateur s'il n'est pas connecté

pouvez-vous m'aider avec petit problème.

J'ai besoin de trouver une solution, comment rediriger l'utilisateur vers la page de connexion lorsqu'il souhaite télécharger le fichier via un lien dans le contenu du message, j'ai donc quelques fichiers et je veux qu'ils soient disponibles uniquement pour les utilisateurs connectés, sinon ils devraient être redirigé sur la page de connexion, par exemple, je veux interdire l'accès (téléchargement) à tous les fichiers du dossier wp-content, n'oubliez pas que j'ai plusieurs de ces dossiers à la racine, j'ai essayé avec le fichier .htaccess mais cela ne fonctionne pas

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?brt\.keezst\.com/ [NC]
RewriteCond %{REQUEST_URI} !hotlink\.(gif|png|jpg|doc|xls|pdf|html|htm|xlsx|docx|mp4|mov) [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule .*\.(gif|png|jpg|doc|xls|pdf|html|htm|xlsx|docx|mp4|mov)$ http://brt.keezst.com/ [NC]
2
Marko.dev

Merci à Marcelo Henriques answer j'ai compris comment faire fonctionner ce fichier avec le fichier .htaccess et voici le code:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} ^.*(mp3|m4a|pdf|doc|xlsx|docx|xls)$
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule (.*) http://website.com/login/

placez le fichier .htaccess dans le dossier que vous souhaitez protéger des utilisateurs non enregistrés. Le travail sera effectué. La dernière ligne est redirigée.

Donc, si vous voulez protéger l’accès aux fichiers par le lien d’ancre, à partir d’un dossier spécifique (uploads/media), créez un fichier .htaccess dans un dossier et collez ce code. Si vous voulez juste 403 (interdit), changez RewriteRule (.*) http://website.com/login/ avec [R=403,L]

1
Marko.dev

Je ne voudrais pas utiliser htaccess pour cela.

Ce que je voudrais faire est de créer un modèle de "page de téléchargement" et de l'utiliser pour "servir" les fichiers.

En faisant cela, je peux faire une vérification avec is_user_logged_in()Codex et rediriger avec wp_login_url()Codex

Il suffit de faire:

if ( is_user_logged_in() ) :
//file link
else :
    wp_login_url();
endif;

Je pense que c'est plus facile et plus sûr de le faire. En outre, vous pouvez même en faire un plugin plus tard et l'utiliser sur d'autres projets ou continuer à l'utiliser si vous modifiez le modèle de votre site.

Je voulais récemment la même chose, sauf que je voulais sécuriser les factures uniquement.

Je mets ceci au dessus de la partie WordPress du .htaccess

<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*wp-content/uploads/invoices/.*
RewriteRule ^wp-content/uploads/(invoices/.*)$ read-file.php?file=$1 [QSA,L]
</ifmodule>

Ceci redirige tout le monde qui veut aller dans un fichier dans le répertoire des factures vers read-file.php qui se trouve également dans la partie supérieure de WordPress. read-file.php a le code suivant pour vérifier si l'utilisateur est connecté

<?php
// Load wp
require_once('wp-load.php');

// If user is logged in
if( ! is_user_logged_in() ) {

    // Redirect to home
    wp_redirect( url to your login page );
    exit;
}

// Additional checks here
// Headers to open or download the file
// readfile( $file );
// exit;

J'espère que ça aide!

1
Wilco