routeProvider没有选择路线AngularJS

时间:2014-09-13 17:44:27

标签: php angularjs cakephp routes

我想拥有像Stack Overflow这样的路线。因此,如果我浏览到/category/id/,服务器将重定向到/category/id/name。但是,当包含斜杠时,我无法获得angularjs路由以获取我的路由。

所以这是我的秘密:

localhost:81/butwhy => works    
localhost:81/category/id => redirects to localhost:81/category/fail    
localhost:81/category/id/name => redirects to localhost:81/category/id/fail

routeProvider似乎只在最后一次斜杠后拾取零件。为什么呢?

app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {

    $routeProvider.
        when('/category/:id/:name', {   
            templateUrl: '/view/example.html',
            controller: 'ExampleCtrl'
        }).
        when('/category/:id', {   
            templateUrl: '/view/example.html',
            controller: 'ExampleCtrl'
        }).
        when('/butwhy', {   
            // just for testing
        }).
        when('/', {
            templateUrl: '/view/examples.html',
            controller: 'ExamplesCtrl'
        }).     
        otherwise({ 
            redirectTo: 'fail'
        });

    $locationProvider.html5Mode(true);
}]);

我不知道这是否重要,但我使用CakePHP和WAMP以及angularjs版本1.2.23

编辑:

我在/ sitefolder / webroot .htaccess

中有以下内容
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

在/ sitefolder / .htaccess

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$    webroot/    [L]
   RewriteRule    (.*) webroot/$1    [L]
</IfModule>

cakephp视图位于/ sitefolder / view /中,angular的html视图位于/ sitefolder / webroot / view /

2 个答案:

答案 0 :(得分:1)

我从来没有使用cakephp为布局服务。但是我发现你可以在ui-router中拥有嵌套视图。所以我不再需要通过cakephp来提供布局了。

在webroot中使用常规index.html作为布局,并通过/ ajax / name调用所有ajax,我就像这样设置.htaccess:

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

但是当我直接浏览localhost时,这不起作用:81,然后它使用index.php而不是index.html。虽然我在网址中描述了一条路径,但它仍然有用。 解决这个问题的方法是改变httpd.conf中的顺序,使index.html在index.php之前

<IfModule dir_module>
    DirectoryIndex index.html index.php index.php3 index.htm
</IfModule>

答案 1 :(得分:-1)

我认为你遗失了#,请尝试以下方法。

网址应为

localhost:81 /#/ category / id
localhost:81 /#/ category / id / name