Shijo Rose
Shijo Rose

Reputation: 213

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

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..

Upvotes: 1

Views: 7712

Answers (3)

Deep Kakkar
Deep Kakkar

Reputation: 6305

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.

Upvotes: 2

Rahul S
Rahul S

Reputation: 11

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.

Upvotes: 0

sarath
sarath

Reputation: 700

For changing the admin url ,Try using the below plugin https://wordpress.org/plugins/wordfence/

Upvotes: -1

Related Questions