vhosts conf for single page app

时间:2015-07-31 11:04:52

标签: angularjs apache single-page-application

我有一个角色应用程序,我在本地使用apache服务。我的vhosts.conf是:

<VirtualHost *:80>
  ServerName my.app.com
  DirectoryIndex index.html
  DocumentRoot /export/www/app
  <Directory "/export/www/app">
    order allow,deny
    allow from all

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.html/$1 [L]
  </Directory>
</VirtualHost>

如果我去应用程序的根目录,一切都很好。我在应用程序中进行了一些导航,它将我带到my.app.com/some/location,但仍然没问题。

但是,如果我此时重新加载页面,则会收到404错误。要回到我想要的地步,我需要回到根并再次通过应用程序导航,或者通过url my.app.com搜索/#/ some / location

我是否可以使用重写规则执行某些操作,以便我不需要哈希来重新加载路由?我尝试将现有规则编辑为:

RewriteRule ^(.*)$ index.html/#/$1 [L]

任何想法都非常感激 ç

2 个答案:

答案 0 :(得分:24)

问题是我使用的是更新版本的apache配置规则已更改。我更新的vhost现在读取

<VirtualHost *:80>
  ServerName my.app.com
  DirectoryIndex index.html
  DocumentRoot /export/www/app
  <Directory "/export/www/app">
    order allow,deny
    allow from all

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(.*) /index.html [NC,L]
  </Directory>
</VirtualHost>

答案 1 :(得分:1)

my.app.com/some/location的工作原理很奇怪。使用AcceptPAthInfo ON,httpd将为index.html提供服务并传递/ some / location的PATH_INFO,但这不应该在客户端JS上做正确的事情。

您尝试的重写似乎完全取代您现有的重写。但是,您需要显式重定向到非相对/index.html并添加[R]标志以确保重定向一直到客户端。否则,它只是一个内部替换,你需要你的浏览器读取#,因为它只在客户端处理。