我正在LAMP堆栈上设置一个Angular站点,并且我已使用以下命令激活了html5mode:
$locationProvider
.html5Mode(true)
.hashPrefix('!#');
加上那是我的.htaccess设置,我是从this gist获得的:
Options +FollowSymLinks
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteRule (.*) index.html [L]
</ifModule>
对于支持History API的浏览器,一切正常,如果我喜欢我的主URL,它会优雅地回到hashbang。我的问题在于,有人直接链接到不支持它的浏览器上的History-ified链接。例如:
支持历史记录
example.com
=&gt;重定向到=&gt; example.com/home/
(home
是默认页面)
example.com/home/
=&gt;加载得很好
不支持历史记录
example.com
=&gt;重定向到=&gt; example.com/!#/home/
example.com/home/
=&gt;没有重定向,一切爆炸,小猫灭亡
我的问题是......当有人直接链接到历史记录链接时,是否有一种有效的方法可以确保回退?即:
example.com/home
=&gt;重定向到=&gt; example.com/!#/home
我已经考虑过.htaccess用于重定向特定浏览器,但这看起来很糟糕(坦率地说,我无法让它工作)。我还考虑了<script>
中的一个<head>
标记,它对历史API支持进行了JavaScript测试+在网址中缺少!#,如果没有则重定向。
这两个看起来都很糟糕,所以我的问题是......有没有正确的方法来做到这一点?如果没有,我需要诉诸这些黑客,如果有人能为我提供至少IE9的.htaccess示例,我会很感激。