0

I'm trying to remove the "#" from the url of my personal website.

From

http://frankcalpitojr.com/#/about

To

http://frankcalpitojr.com/about

I tried doing this AngularJS routing without the hash '#'

But what happened is the url turns changes to http://frankcalpitojr.com/#%2Fabout and I tried different methods like setting requirebase to false and adding base to the head of the index file.

Here's my code

app.js

var AngularTemplateApp = angular.module('AngularTemplateApp', [
  'ngRoute',
  'appTest'
]);

AngularTemplateApp.config(['$routeProvider', '$locationProvider',
  function($routeProvider, $locationProvider) {
    $routeProvider.
      when('/', {
        templateUrl: 'partials/home.html',
        controller: 'HomeCtrl',
        activetab: 'home'
      }).

      when('/page', {
        templateUrl: 'partials/page.html',
        controller: 'PageCtrl',
        activetab: 'page'
      }).

      when('/page/:pageId', {
        templateUrl: 'partials/page-details.html',
        controller: 'PageDetailsCtrl',
        activetab: 'page'
      }).

      when('/about', {
        templateUrl: 'partials/about.html',
        controller: 'AboutCtrl',
        activetab: 'about'
      }).

      when('/contact', {
        templateUrl: 'partials/contact.html',
        controller: 'ContactCtrl',
        activetab: 'contact'
      }).

      when('/phones', {
        templateUrl: 'partials/phone-list.html',
        controller: 'SampleListCtrl',
        activetab: 'phones'
      }).

      when('/phones/:phoneId', {
        templateUrl: 'partials/phone-detail.html',
        controller: 'SampleDetailCtrl',
        activetab: 'phones'
      }).

      otherwise({
        redirectTo: '/'
      });

      // $locationProvider.html5Mode(true);

      if(window.history && window.history.pushState){
        $locationProvider.html5Mode({
          enabled: true,
          requireBase: false
        });
      }

  }]);

controller.js

var appTest = angular.module('appTest', ['ui.bootstrap.tpls']);

appTest.controller('HomeCtrl', ['$scope', '$http',
  function ($scope, $http) {
    
    $scope.pages = [
      { id:'1', title:'Home', pageRoute:'', activeNav:'home' },
      { id:'2', title:'About', pageRoute:'about', activeNav:'about'},
      { id:'3', title:'Contact', pageRoute:'contact', activeNav:'contact'}
    ];

    $scope.projects = [{"id":1, "name":"Test 1","date":"2015-10-22", "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim."},
    {"id":2, "name":"Test 2", "date":"2015-10-22", "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim."},
    {"id":3, "name":"Test 3", "date":"2015-10-22", "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim."},
    {"id":4 , "name":"Test 4", "date":"2015-10-22", "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim."}];

  }]);

appTest.controller('PageCtrl', ['$scope', '$http',
  function ($scope, $http) {
   
  }]);

appTest.controller('PageDetailsCtrl', ['$scope', '$http',
  function ($scope, $http) {
   
  }]);

appTest.controller('AboutCtrl', ['$scope', '$http',
  function ($scope, $http) {
   
  }]);

appTest.controller('ContactCtrl', ['$scope', '$http',
  function ($scope, $http) {
   
  }]);

appTest.controller('SampleListCtrl', ['$scope', '$http',
  function ($scope, $http) {
   $scope.phones = [
    { 'phoneId': '1',
      'name': 'Nexus S',
     'snippet': 'Fast just got faster with Nexus S.',
     'age': 1},
    {'phoneId': '2',
      'name': 'Motorola XOOM™ with Wi-Fi',
     'snippet': 'The Next, Next Generation tablet.',
     'age': 2},
    {'phoneId': '3',
      'name': 'MOTOROLA XOOM™',
     'snippet': 'The Next, Next Generation tablet.',
     'age': 3}
  ];

    $scope.orderProp = 'age';
  }]);

appTest.controller('SampleDetailCtrl', ['$scope', '$routeParams',
  function($scope, $routeParams) {
    $scope.phoneId = $routeParams.phoneId;
  }]);

my index.html and menu.html

<!doctype html>
<html lang="en">
<head>
	<title> App Template </title>
	<script src="node_modules/angular/angular.js"></script>
	<script src="node_modules/angular-route/angular-route.js"></script>
	<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.css"/>
	<!-- <script src="node_modules/bootstrap/dist/js/bootstrap.js"></script> -->
	<script src="node_modules/angular-ui-bootstrap/ui-bootstrap-tpls.js"></script>
	<script src="app/js/app.js"></script>
	<script src="app/js/controllers.js"></script>
	<link rel="stylesheet" href="assets/css/main.css"/>

	<!-- <base href="/"> -->

</head>

<body ng-app="AngularTemplateApp">

	<div ng-include src="'partials/menu.html'"></div>

	<div class="view-animate-container">

		<div id="main-view" ng-view class="view-animate">
			

		</div>
		
	</div>

</body>

</html>

<div id="menu">
	<div class="container">
		<div ng-controller="HomeCtrl" class="pull-right">
			<ul class="nav nav-pills">
				<li role="presentation">
					<a href="#/"> Home </a>
				</li>
				<li role="presentation">
					<a href="#/about"> About </a>
				</li>
				<li role="presentation">
					<a href="#/contact"> Contact </a>
				</li>	
			</ul>
		</div>
	</div>
</div>

I'm trying to learn angularjs so i loaded it to my test site to see if it works. You can check it out here Thanks in advance!

1 Answer 1

1

You should use

$locationProvider.html5Mode(true)

as you tried but you should also remove the '#' from your anchors in the HTML file so that it should look something like

<div id="menu">
	<div class="container">
		<div ng-controller="HomeCtrl" class="pull-right">
			<ul class="nav nav-pills">
				<li role="presentation">
					<a href="/"> Home </a>
				</li>
				<li role="presentation">
					<a href="/about"> About </a>
				</li>
				<li role="presentation">
					<a href="/contact"> Contact </a>
				</li>	
			</ul>
		</div>
	</div>
</div>
 

Hope this helps.

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks for the answer. I tried that, but the result is still the same.
I just browsed your live example (frankcalpitojr.com), inspected the About link element, removed the '#' character from the anchor and then pressed the button and the About page was served.
Thanks Stefan, it works now. I was testing the wrong window, sorry about that. Thanks again!
No problem, glad it helped you. :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.