अक्षम करें या WP-login.php को पुनर्निर्देशित करें


10

क्या आगंतुकों को रोकने का कोई तरीका है, चाहे वह लॉग इन हो या नहीं, पहुंचने से mysite.com/wp-login.php?

मेरे पास एक अलग लॉगिन फ़ॉर्म है जिसकी हमें आवश्यकता है। मुझे पता है कि मैं इस फॉर्म को फिर से स्टाइल कर सकता wp-loginहूं, लेकिन मुझे इससे बिल्कुल भी जूझना नहीं पड़ेगा। मैंने विभिन्न फ़िल्टर और हुक आज़माए हैं और मैं इसे पुनर्निर्देशित नहीं कर सकता। मैंने एक .htaccessरीडायरेक्ट का उपयोग करने की भी कोशिश की और मैंने पाया कि यह काम करता है, लेकिन फिर यह मेरे कस्टम लॉगिन / लॉगआउट फॉर्म को काम करने से रोकता है।

विचार?


क्या आप सुरक्षा कारणों से ऐसा कर रहे हैं? केवल wp-login.php के लिए क्यों लागू नहीं?
गैया

मुझे नहीं पता कि आपका क्या मतलब है। कृपया थोड़ा विस्तार करें। TIA।
jchwebdev

आपको एक अलग लॉगिन फ़ॉर्म की आवश्यकता क्यों है? सुरक्षा कारणो से?
गैया

हम पाते हैं कि इन दिनों बहुत से लोग 'wp-login' के बारे में जानते हैं। हम नहीं बल्कि यह इतना स्पष्ट होना चाहिए। क्या आप मुझे बता सकते हैं कि 'क्यों लागू नहीं' का मतलब है? TIA
jchwebdev

प्रदान किया गया उत्तर देखें।
गाइया

जवाबों:


19

इस प्रश्न को खोजने के बाद, और कुछ उत्तरों का परीक्षण करने के बाद, नीचे एक "क्लीन अप" संस्करण है जो मैं उत्पादन वातावरण में उपयोग कर रहा हूं।

यह संस्करण किसी भी नोटिस / त्रुटियों को नहीं फेंकता है, और पासवर्ड रीसेट करने के लिए भी काम करता है:

// Hook the appropriate WordPress action
add_action('init', 'prevent_wp_login');

function prevent_wp_login() {
    // WP tracks the current page - global the variable to access it
    global $pagenow;
    // Check if a $_GET['action'] is set, and if so, load it into $action variable
    $action = (isset($_GET['action'])) ? $_GET['action'] : '';
    // Check if we're on the login page, and ensure the action is not 'logout'
    if( $pagenow == 'wp-login.php' && ( ! $action || ( $action && ! in_array($action, array('logout', 'lostpassword', 'rp', 'resetpass'))))) {
        // Load the home page url
        $page = get_bloginfo('url');
        // Redirect to the home page
        wp_redirect($page);
        // Stop execution to prevent the page loading for any reason
        exit();
    }
}

यह WP-Login (अच्छा) को रोकने के लिए लगता है, लेकिन अंतिम निकास () वास्तविक लॉगिन () को बिल्कुल भी होने से रोकता है जो कि हम नहीं चाहते हैं। हम चाहते हैं कि लोग लॉग इन कर सकें, बस कभी भी WP-Login स्क्रीन न देखें। यदि वे एक गलत पीडब्लू दर्ज करते हैं तो यह हमारे कस्टम लॉगिन पृष्ठ पर पुनर्निर्देशित होना चाहिए।
18-13 को jchwebdev

संपादित यह और यह अब काम कर रहा है: क्या आप की जाँच करने के लिए है, तो $ कार्रवाई in_array () करने से पहले भर जाता है
simonthesorcerer

यह मेरे लिए काम नहीं किया। मैं अभी भी लॉग इन कर सकता हूं।
माइक

@ माइक - क्या आप सुनिश्चित हैं कि आपका हुक काम कर रहा है / कर रहा है? यदि आप echo "HERE";फ़ंक्शन के अंदर रखते हैं तो क्या होगा ? क्या यह गूंजता है?
random_user_name

1
@ cale_b हां, हुक ठीक काम कर रहा है। समस्या यह है कि $_GET['action']मेरे लिए खाली है। फॉर्म /wp-login.php(URL में किसी भी GET वेरिएबल्स के बिना) के लिए पोस्ट किया गया है और स्रोत को देखते हुए एक पुट नाम में भी नहीं है action, इसलिए भी $_REQUEST['action']खाली है।
माइक

10

अपने विषय के functions.php में इसे आज़माएं

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/');
  exit();
 }
}

मेरे लिए काम कर रहे हैं, लेकिन लॉग आउट मुद्दों और खिचड़ी भाषा का पता लगाने क्यों
Androliyah

7
क्योंकि wp-login.php लॉग आउट करने के साथ ही हैंडल करता है।
बजे ब्रायन फीगर

हाँ, यह मेरे कस्टम लॉगिन फ़ॉर्म को अवरुद्ध करता है। लेकिन अगर रिक्वेस्ट वेरिएशन या शायद रेफ़र के लिए मज़बूती से जांचने का कोई तरीका था? IOW: यह एक प्रारंभिक बिंदु हो सकता है। कोई और? TIA --- JC
jchwebdev

आह हां, wp-login लॉग आउट को हैंडल करता है। जबरदस्त हंसी। यह तार्किक है। शायद एक प्लगइन के साथ यह कोड पर्याप्त होगा। मुझे देखने दो कि हम और क्या उपयोग कर सकते हैं क्योंकि मुझे wp-login का उपयोग करने से नफरत है।
एंड्रोलियाह

मुझे लगता है कि wp-login लोड होने पर अनुरोध var की निगरानी करना आवश्यक होगा। मेरे पास अभी ऐसी मशीन नहीं है जो अभी ऐसा कर सके।
jchwebdev

4

लॉगआउट कार्रवाई के लिए GET संस्करण जोड़ें और यह ठीक काम करता है।

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && $_GET['action']!="logout") {
  wp_redirect('http://YOURSITE.com/');
  exit();
 }
}

अब तक, यह वही है जो हम चाहते हैं। यदि हम बाहर निकलें () को हटा दें और अपने कस्टम लॉगिन पृष्ठ पर wp_redirect को बदल दें, तो यह काम करने लगता है।
jchwebdev

3

मैं काफी समय से WordPress plugin Rename wp-login.php का उपयोग कर रहा हूँ ।

यह आपको wp-login.phpकिसी अन्य पथ पर स्विच करने देता है । मैं अपने लॉगिन पृष्ठों को बंद कर रहा था, और अब मुझे शून्य हिट मिल रहे हैं।


1

WP-login लॉगिन, लॉगआउट, पंजीकरण, पासवर्ड रीसेट और पुनर्प्राप्ति को संभालता है। मान लें कि आप फ्रंट-एंड लॉगिन पेज बदलना चाहते हैं। आप निम्न कोड का सुरक्षित रूप से उपयोग कर सकते हैं:

function custom_login_page() {
 $new_login_page_url = home_url( '/login/' ); // new login page
 global $pagenow;
 if( $pagenow == "wp-login.php" && $_SERVER['REQUEST_METHOD'] == 'GET') {
    wp_redirect($new_login_page_url);
    exit;
 }
}

if(!is_user_logged_in()){
 add_action('init','custom_login_page');
}

यह कोड स्निपेट होगा:

  1. सभी वेबसाइट विज़िटर को नए लॉगिन पृष्ठ पर पुनर्निर्देशित करें।
  2. लॉगआउट बिना किसी समस्या के काम करेगा
  3. अपने कस्टम लॉगिन पेज पर आपको कस्टम लॉगिन, पंजीकरण और पासवर्ड रीसेट फॉर्म बनाने होंगे, हालांकि आपके कस्टम फॉर्म सुरक्षित रूप से wp-login.php पर डेटा पोस्ट कर सकते हैं क्योंकि पोस्ट अनुरोध पुनर्निर्देशित नहीं होते हैं।

1
home_url()पहले से ही एक प्रमुख स्लैश जोड़ता है, इसलिए उसके लिए कोई ज़रूरत नहीं है। यह $pagenowभी (ए) एक वैश्विक है जो केवल व्यवस्थापक (और शायद लॉगिन) पर मौजूद है और (बी) को get_current_screen()संपत्ति की जांच के साथ बदल दिया जाना चाहिए ।
केसर

1
// https://codex.wordpress.org/Plugin_API/Filter_Reference/login_url#Examples
add_filter('login_url', 'custom_login_url', 10, 3);

function custom_login_url($login_url, $redirect, $force_reauth) {
    return home_url('/login/?redirect_to=' . $redirect);
}

यह गंदा wp-login फॉर्म के बजाय / लॉगिन पर रीडायरेक्ट करेगा।


हम्म् दिलचस्प विचार है, लेकिन कृपया बताएं कि यह कैसे / क्यों काम करता है
मार्क कपलुन

यह काम नहीं करेगा। यह फ़िल्टर लॉगिन url के लिए login_url () के माध्यम से अनुरोध करता है, यह किसी को मैन्युअल रूप से wp-login.php टाइप करने से नहीं रोकता है।
मैट

0

यदि आपका इरादा wp-login.phpअजनबियों से रक्षा करना है , यहां तक ​​कि इसे देखने में सक्षम है, तो ऐसा करने का सबसे सरल कुशल तरीका प्राधिकरण (मूल नीति) तक पहुंचने के लिए आवश्यक है wp-login.php

में अपाचे, प्रमाणन htaccess का एक संयोजन और एक पासवर्ड फ़ाइल के माध्यम से कार्यान्वित किया जाता है । पहली बार, ब्राउज़र सत्र के भीतर, कि कोई भी उपयोग करने का प्रयास करता है, wp-login.phpउन्हें उपयोगकर्ता नाम और पासवर्ड (वर्डप्रेस लॉगिन से पहले) दर्ज करने के लिए प्रेरित किया जाएगा।

चीजों को सरल बनाने के लिए, यह उपयोगकर्ता नाम और पासवर्ड हर उस व्यक्ति के लिए समान हो सकता है, जिसे आप एक्सेस देना चाहते हैं wp-login.php, क्योंकि उन्हें अभी भी पहला वर्डप्रेस लॉगिन सफलतापूर्वक दर्ज करने के बाद अपना वर्डप्रेस लॉगिन दर्ज करना है।


दिलचस्प। मैं 'प्रांप्ट' मान रहा हूं कि क्रेडेंशियल दर्ज करने के लिए ब्राउज़र का मोडल पॉपअप है। मुझे लगता है कि इससे भ्रम पैदा होगा। आदर्श रूप से मैं जो चाहता हूं वह URL के लिए करना है -nothing -... या शायद होम पेज पर रीडायरेक्ट करना। लेकिन इसके लिए धन्यवाद। प्रति दिन कुछ नया सीखें!
jchwebdev

आपको लगता है कि आप जो कर रहे हैं वह "सुरक्षा के माध्यम से अस्पष्टता" है। लेकिन वास्तव में आप केवल अश्लीलता कर रहे हैं, और यह भयानक है। इसका प्रयोग न करें। प्रामाणिक सुरक्षा है। प्रवेश बिंदु छिपाना अस्पष्टता है। security.stackexchange.com/questions/32064/…
Gaia

1
दूसरे शब्दों में, यहां तक ​​कि अगर आप wp-login का स्थान बदलते हैं, तो आपको अभी भी ऑर्टिकल का उपयोग करने की आवश्यकता है: "क्या मुझे अपना कनेक्शन सुरक्षित रखने के लिए सर्वर को 22 से पोर्ट 2222 में बदलने पर भरोसा करना चाहिए? बिल्कुल नहीं? क्या मेरा बदलना बुरा है? एक पासवर्ड का उपयोग करते हुए 2222 को पोर्ट करने के लिए SSH सर्वर? नहीं, अगर कुछ भी यह सबसे अच्छा समाधान है। बदलना ("अस्पष्ट") पोर्ट बस सामान्य बंदरगाहों की खोज करने वाले स्वचालित शोषण स्कैनर के ढेर पर कट जाएगा। अस्पष्टता जो अच्छी है, लेकिन हम अस्पष्टता की गिनती नहीं कर रहे हैं। यदि उन्हें पता चला कि उन्हें अभी भी पासवर्ड को क्रैक करने की आवश्यकता है। "
गइया २

उसके लिए धन्यवाद। मैंने बहुत कुछ सीखा। वह नहीं जो मैं ढूंढ रहा था, लेकिन फिर भी ... बहुत मददगार। सर्वश्रेष्ठ --- JC
jchwebdev

0

$pageidउस पृष्ठ से बदलें जिसे आप चाहते हैं कि उपयोगकर्ताओं को पुनर्निर्देशित किया जाए

/* Redirect log in page */
function redirect_login_page(){
  // Store for checking if this page equals wp-login.php
   $page_viewed = basename( $_SERVER['REQUEST_URI'] );

  // permalink to the custom login page
  $login_page  = get_permalink($pageid);

  if( $page_viewed == "wp-login.php" ) {
    wp_redirect( $login_page );
    exit();
  }
}

add_action( 'init','redirect_login_page' );

0
<?php
/* Template Name: Register Template */
if(is_user_logged_in()) { $user_id = get_current_user_id();$current_user = wp_get_current_user();$profile_url = get_author_posts_url($user_id);$edit_profile_url = get_edit_profile_url($user_id); ?>
<div class="regted">
    You're login with nickname <a href="<?php echo $profile_url ?>"><?php echo $current_user->display_name; ?></a> Are you want to <a href="<?php echo esc_url(wp_logout_url($current_url)); ?>">Exit</a> ?
</div>
<?php } else { ?>
<div class="register">
    <?php $err = ''; $success = ''; global $wpdb, $PasswordHash, $current_user, $user_ID; if(isset($_POST['task']) && $_POST['task'] == 'register' ) { $pwd1 = $wpdb->escape(trim($_POST['pwd1']));
        $pwd2 = $wpdb->escape(trim($_POST['pwd2']));
        $email = $wpdb->escape(trim($_POST['email']));
        $username = $wpdb->escape(trim($_POST['username']));

        if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "") {
            $err = 'Please enter password in this field';
        } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $err = 'Email is invalid';
        } else if(email_exists($email) ) {
            $err = 'Email is existed';
        } else if($pwd1 <> $pwd2 ){
            $err = 'Password does not match the confirm password';
        } else {
            $user_id = wp_insert_user( array ('user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
            if( is_wp_error($user_id) ) {
                $err = 'Error on user creation.';
            } else {
                do_action('user_register', $user_id);
                $success = 'Registered Successfully';
            }
        }
    }
    ?>
  <link  rel="stylesheet" type="text/css"  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!--display error/success message-->
<div id="message">
        <?php
            if(! empty($err) ) :
                echo ''.$err.'';
            endif;
        ?>
        <?php
            if(! empty($success) ) :
                $login_page  = home_url( '/login' );
                echo ''.$success. '<a href='.$login_page.'> Login</a>'.'';
            endif;
        ?>
    </div>

           <div class="container">    
        <div id="loginbox" style="margin-top:100px;" class="mainbox col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
          <div style="padding-bottom: 50px;" class="col-md-6 col-md-offset-4 col-sm-8 col-sm-offset-2"/><img src="#url.logo"></div>
    <form class="form-horizontal" method="post" role="form">
<div class="form-group">
    <label class="control-label  col-sm-3" for="username">Username:</label>
    <div class="col-sm-9">
    <input type="text" class="form-control" name="username" id="username" placeholder="Username">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="email">Email:</label>
    <div class="col-sm-9">
        <input type="email" class="form-control" name="email" id="email" placeholder="Email">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd1">Password</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd1" id="pwd1" placeholder="Enter your password">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd2">Retype password:</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd2" id="pwd2" placeholder="Retype password">
    </div>
</div>
<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
<div class="form-group">
    <div class="col-sm-offset-3 col-sm-9"  style="text-align:center;">
    <button type="submit" class="btn btn-primary">Register</button>
    <input type="hidden" name="task" value="register" /><br/>
    </div>
</div>
</form>
</div>
</div>
</div>
<?php 
get_footer();
 ?>
<div class="message">
    <?php
        $login  = (isset($_GET['login']) ) ? $_GET['login'] : 0;
        if ( $login === "failed" ) {
                echo '<strong>Error</strong> Wrong username or password!';
        } elseif ( $login === "empty" ) {
                echo '<strong>Error:</strong>Username or password is blank field.';
        } elseif ( $login === "false" ) {
                echo '<strong>ERROR:</strong> Exit';
        }
    ?>
</div>
<?php } ?>

मेरे कस्टम लॉगिन पेज का उदाहरण दें। Login.php को सेव करना और कोड डालना

add_action('init','wpse_login');

function wpse_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/login.php');
  exit();
 }
}

में functions.php


क्या आप कृपया अपने प्रश्न को संपादित कर सकते हैं और बता सकते हैं कि यह उत्तर पिछले उत्तरों से बेहतर क्यों है या आप जो कर रहे हैं वह वास्तव में क्या कर रहे हैं। कोड केवल जवाब आमतौर पर स्पष्टीकरण के कुछ प्रकार के बिना पर फेंक रहे हैं।
Howdy_McGee

यह कोड wp-login.php पर जाएँ। बूटस्ट्रैप के आधार पर मेरे कस्टम कोड के साथ login.php पर यह ऑटो बॉट को रोक सकता है या डिफ़ॉल्ट url का अनुमान लगा सकता है। उपयोग बदल सकते हैं <i> लॉगिन </ i> वाक्यांश को आप क्या चाहते हैं। और कोई नहीं जानता कि सीधे लॉगिन url आप को दिखाते हैं।
री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.