我有一个角色应用程序,我在本地使用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]
任何想法都非常感激 ç
答案 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]标志以确保重定向一直到客户端。否则,它只是一个内部替换,你需要你的浏览器读取#,因为它只在客户端处理。