WordPress Hide wp-admin to admin with Nginx

I would like to redirect example.com/wp-admin to my index and make the WP-Admin accessible though something like example.com/admin.

I did this in apache but after switching to nginx I don’t know how to do this?.

Read More

Is there a way to do this without changing any of the wordpress files but changing the nginx config ?
Also need to access example.com/wp-admin/index.php as example.com/admin/index.php, example.com/wp-admin/posts.php as example.com/admin/posts.php etc..

Related posts

3 comments

  1. In my opinion if you use plugin than it will find security holes in your WordPress.

    You can use the following steps to create your own URL of login either admin or else as follows:

    1.) Add constant to wp-confing.php

    define('WP_ADMIN_DIR', 'secret-folder');
    define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . WP_ADMIN_DIR);
    

    2.) Add below filter to functions.php

    add_filter('site_url',  'wpadmin_filter', 10, 3);
    
    function wpadmin_filter( $url, $path, $orig_scheme ) {
      $old  = array( "/(wp-admin)/");
      $admin_dir = WP_ADMIN_DIR;
      $new  = array($admin_dir);
      return preg_replace( $old, $new, $url, 1);
    }
    

    3.) Add below line to .htaccess file if you are using Apache

    RewriteRule ^secret-folder/(.*) wp-admin/$1?%{QUERY_STRING} [L]
    

    Edit the Nginx virtual host file and place the following:

    location ~* /admin/ {
      rewrite ^/admin/(.*) /wp-admin/$1 last;
    }
    

    Done…!!!

    Now your admin URL will be like: http://www.yourdomain.com/secret-folder/

    and the below code will restrict the URL: site.com/wp-admin

    add_action('login_form','redirect_wp_admin');
    
    function redirect_wp_admin(){
      $redirect_to = $_SERVER['REQUEST_URI'];
    
      if(count($_REQUEST)> 0 && array_key_exists('redirect_to', $_REQUEST)){
        $redirect_to = $_REQUEST['redirect_to'];
        $check_wp_admin = stristr($redirect_to, 'wp-admin');
        if($check_wp_admin){
          wp_safe_redirect( '404.php' );
        }
      }
    }
    

    Edited:
    Edit the Nginx virtual host file and place the following:

    location ~* /admin/ {
      rewrite ^/admin/(.*) /wp-admin/$1 last;
    }
    

    In case if you want to redirect url from index.php to back on admin

    server {
      index index.php;
    
      if ($request_uri ~* "^(.*/)index.php$") {
        return 301 $1;
      }
    
      location = /admin/index.php {
        return 301 $scheme://www.example.com/admin/;
      }
    }
    

    Another benefit from doing it this way is that nginx does a return faster than a rewrite.

  2. You mean to change the url of wp-admin. Then you can use a plugin mentioned below
    WordPress Link

    After installing the plugin Under settings->Permalink we can change WP-admin page slug to what we need.

Comments are closed.