我想拥有像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 /
答案 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