Angularjs Angular.js路由在WAMP上不工作
我正在建立一个Angular.js单页应用程序,该应用程序使用Express、Node和mySQL堆栈构建。我已为路线设置了以下代码:Angularjs Angular.js路由在WAMP上不工作,angularjs,apache,.htaccess,mod-rewrite,single-page-application,Angularjs,Apache,.htaccess,Mod Rewrite,Single Page Application,我正在建立一个Angular.js单页应用程序,该应用程序使用Express、Node和mySQL堆栈构建。我已为路线设置了以下代码: angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives']). config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives']).
config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'partials/index',
controller: IndexCtrl
})
.when('/addPost', {
templateUrl: 'partials/addPost',
controller: AddPostCtrl
})
.when('/readPost/:id', {
templateUrl: 'partials/readPost',
controller: ReadPostCtrl
})
.when('/editPost/:id', {
templateUrl: '/partials/editPost',
controller: EditPostCtrl
})
.when('/deletePost/:id', {
templateUrl: 'partials/deletePost',
controller: DeletePostCtrl
})
.when('/todos', {
templateUrl: 'partials/todos',
controller: TodosCtrl
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
}]);
当我转到我的应用程序localhost:3000,然后单击localhost:3000/todos的链接时,一切正常,但是当我刷新页面时,我得到一个错误,即无法获取/todos。经过一些研究,我发现问题在于,当您刷新服务器时,会尝试加载/TODO,并且由于资源不存在,因此会出现错误。解决方案似乎是设置mod_rewrite,将任何页面重定向到索引,以便正确路由
因此,我确保mod_rewrite在httpd.conf中未提交,并更新了以下部分:
<Directory />
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
然后用app.js在我的根目录中创建了一个.htaccess文件。在我创建的.htaccess文件中,我添加了以下代码:
<IFModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ '/'
</IFModule>
然后我重新启动了apache,并在localhost:3000/todos上点击刷新,得到了相同的Cannot GET/todos消息。我做错了什么
我的一些想法是
我不知道把.htaccess放在哪个目录中,所以我只把它放在根目录中。
我不确定“/”是否是将用户发送到的正确位置,我希望它转到索引,但由于我在/public/index.jade中只有一个index.jade文件,我想知道是否需要以某种方式指向该位置,但jade扩展名似乎错了。
我编写的重写规则是将用户带到登录页还是他们刷新/添加书签的正确页面,即在localhost:3000/todos上刷新应该带您到todos页面而不是主页
当我需要重写url时,我总是使用vhost。也许它可以解决你的问题: I.激活apache module rewrite_module,一种解决方案是单击任务栏右侧的WAMP图标:
wamp -> Apache -> Apache modules -> check rewrite_module
二,。打开文件httpd.conf wamp->Apache->httpd.conf并取消注释行:
Include conf/extra/httpd-vhosts.conf
三、 打开文件httpd-vhosts.conf:
加
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "C:/PATH/TO/MYAPP"
ServerName myapp.test
ServerAlias www.myapp.test
ErrorLog "logs/myapp-error.log"
CustomLog "logs/myapp-access.log" common
<Directory "C:/PATH/TO/MYAPP">
Options Indexes FollowSymLinks
AllowOverride all
# onlineoffline tag - don't remove
Require local
</Directory>
</VirtualHost>
127.0.0.1 myapp.test
127.0.0.1 www.myapp.test
加
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "C:/PATH/TO/MYAPP"
ServerName myapp.test
ServerAlias www.myapp.test
ErrorLog "logs/myapp-error.log"
CustomLog "logs/myapp-access.log" common
<Directory "C:/PATH/TO/MYAPP">
Options Indexes FollowSymLinks
AllowOverride all
# onlineoffline tag - don't remove
Require local
</Directory>
</VirtualHost>
127.0.0.1 myapp.test
127.0.0.1 www.myapp.test
试试你的新网址http://myapp.test/todos
希望能有所帮助。mod_alias或aliasmatch可能会有所帮助 基本上,您需要在应用程序有效路由的任何URL上提供脚本内容 我认为这可以做到:
AliasMatch ^/todos(.*) /
AliasMatch ^/deletePost(.*) /
AliasMatch ^/editPost(.*) /
...
需要注意的一点是,如果您的应用程序需要将内容(如模板)实际回传给用户,请确保它们不在与路由别名相同的目录结构下
例如,如果您有一个名为todos/todos.html的模板,当浏览器试图获取该模板时,它会获取您的/页面的副本。这似乎与我所属的公司域冲突,因为我被发送到公司内部404页面