$urlRouterProvider
(service in module ui.router.router
)
$urlRouterProvider has the responsibility of watching $location. 
When $location changes it runs through a list of rules one by one until a 
match is found. $urlRouterProvider is used behind the scenes anytime you specify 
a url in a state configuration. All urls are compiled into a UrlMatcher object.
There are several methods on $urlRouterProvider that make it useful to use directly
in your module config.
Defines a path that is used when an invalied route is requested.
rule – {string|object} – 
The url path you want to redirect to or a function 
rule that returns the url path. The function version is passed two params: 
$injector and $location services.
{object}
– $urlRouterProvider - $urlRouterProvider instance
var app = angular.module('app', ['ui.router.router']);
app.config(function ($urlRouterProvider) {
  // if the path doesn't match any of the urls you configured
  // otherwise will take care of routing the user to the
  // specified url
  $urlRouterProvider.otherwise('/index');
  // Example of using function rule as param
  $urlRouterProvider.otherwise(function ($injector, $location) {
    ...
  });
});
Defines rules that are used by `$urlRouterProvider to find matches for specific URLs.
rule – {object} – 
Handler function that takes $injector and $location
services as arguments. You can use them to return a valid path as a string.
{object}
– $urlRouterProvider - $urlRouterProvider instance
var app = angular.module('app', ['ui.router.router']);
app.config(function ($urlRouterProvider) {
  // Here's an example of how you might allow case insensitive urls
  $urlRouterProvider.rule(function ($injector, $location) {
    var path = $location.path(),
        normalized = path.toLowerCase();
    if (path !== normalized) {
      return normalized;
    }
  });
});
Registers a handler for a given url matching. if handle is a string, it is treated as a redirect, and is interpolated according to the syyntax of match (i.e. like String.replace() for RegExp, or like a UrlMatcher pattern otherwise).
If the handler is a function, it is injectable. It gets invoked if $location
matches. You have the option of inject the match object as $match.
The handler can return
$urlRouter
will continue trying to find another one that matches.$location.url()$urlRouter that the url was handled.what – {string|object} – 
The incoming path that you want to redirect.
handler – {string|object} – 
The path you want to redirect your user to.
var app = angular.module('app', ['ui.router.router']);
app.config(function ($urlRouterProvider) {
  $urlRouterProvider.when($state.url, function ($match, $stateParams) {
    if ($state.$current.navigable !== state ||
        !equalForKeys($match, $stateParams) {
     $state.transitionTo(state, $match, false);
    }
  });
});