Redirigir al usuario si no ha iniciado sesión

2

puedes ayudarme con un pequeño problema.

Necesito encontrar una solución, cómo redirigir al usuario a la página de inicio de sesión cuando desea descargar el archivo a través del enlace en el contenido de la publicación, por lo tanto, tengo algunos archivos y quiero que estén disponibles solo para los usuarios que han iniciado sesión. de lo contrario, deberían ser redirigidos en la página de inicio de sesión, por ejemplo, quiero prohibir el acceso (descargar) para todos los archivos de la carpeta wp-content, tenga en cuenta que tengo varias de esas carpetas en la raíz, probé con el archivo de archivo .htaccess pero no funciona

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]
    
pregunta Marko.dev 08.11.2017 - 10:21

3 respuestas

1

Gracias a Marcelo Henriques respuesta me di cuenta de cómo hacer que esto funcione con .htaccess archivo y aquí está el código:

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/

coloque el archivo .htaccess en la carpeta que desea proteger de usuarios no registrados y hará el trabajo, la última línea es la redirección.

Entonces, si desea proteger el acceso a los archivos a través del enlace de anclaje, desde una carpeta específica (cargas / medios) cree un archivo .htaccess dentro de la carpeta y pegue este código. Si solo desea 403 (prohibido), cambie RewriteRule (.*) http://website.com/login/ con [R=403,L]

    
respondido por el Marko.dev 08.11.2017 - 12:17
4

No usaría htaccess para eso.

Lo que haría sería crear una plantilla de 'página de descarga' y usarla para 'servir' los archivos.

Al hacer eso, puedo hacer una comprobación con is_user_logged_in() Codex y redirigir con wp_login_url() Codex

Solo hazlo:

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

Creo que es más fácil y más seguro hacerlo. Además, incluso puedes convertirlo en un complemento más adelante y usarlo en otros proyectos o seguir usándolo si cambias la plantilla de tu sitio.

    
respondido por el Marcelo Henriques Cortez 08.11.2017 - 10:46
1

Recientemente quise lo mismo, excepto que solo quería proteger las facturas.

Puse esto encima de la parte de WordPress de .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>

Esto redirige a todos los que quieran ir a un archivo en el directorio de facturas a read-file.php, que se encuentra justo en el nivel superior de WordPress. read-file.php tiene el siguiente código para verificar si el usuario ha iniciado sesión

<?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;

Espero que ayude!

    
respondido por el Wilco 08.11.2017 - 12:20

Lea otras preguntas en las etiquetas