Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular.js路由在WAMP上不工作_Angularjs_Apache_.htaccess_Mod Rewrite_Single Page Application - Fatal编程技术网

Angularjs Angular.js路由在WAMP上不工作

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.js单页应用程序,该应用程序使用Express、Node和mySQL堆栈构建。我已为路线设置了以下代码:

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页面