Angular route with html5Mode giving 'Not found' page after reload

All we need is an easy explanation of the problem, so here it is.

I made some Angular routes as shown in the code bellow.

app.config(function($routeProvider, $locationProvider, $provide) {
    $routeProvider
    .when('/', {
         templateUrl: 'home.html',
         controller: 'AppCtrl'
    });
    .when('/portfolio', {
        templateUrl: 'portfolio.html',
        controller: 'AppCtrl'
    })
    $provide.decorator('$sniffer', function($delegate) {
         $delegate.history = historyCompatCheck();
         return $delegate;
    });
    $locationProvider.html5Mode(true);
});

This works fine, after i set the base href to be “/” it accepted an anchor with the href of “/portfolio”, but when i go to “http://url.com/portfiolo” or try to reload the page when i’m on the portfolio route it will give me an server error. Can i do something about this?

Thanks in advance.

How to solve :

I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.

Method 1

I solved it myself.. you always need to make a .htaccess file in the root of your project. Containing the following:

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
 </IfModule>

Method 2

#BEGIN

Options +FollowSymLinks

<ifModule mod_rewrite.c>
    RewriteEngine on

    # Don't rewrite files or directories
     RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} -s [OR]
   RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]

   RewriteRule ^(.*) your root folder/index.php [NC,L]

 </ifModule>
   #END

its working 100% <base href="/" rel="nofollow noreferrer noopener"></base>
also add to your index.html code in <head>section

Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply