当浏览器调用http://example.com/#!/item/1/
时,它是在调用 的索引页http://example.com/
,你的 JS 然后通过分析 hashtag 来确定要显示什么内容。
当浏览器调用http://example.com/item/1/
时,您的服务器正在尝试为 的索引页提供服务http://example.com/item/1/
,但它无法找到并因此引发 404 错误。
为了实现你想要的,你要么需要:
- 创建重写规则以重写指向您的根索引页面的链接
- 调整您的 JS,使其生成主题标签而不是 URL。
$locationProvider.html5Mode(false);
如果您使用的是 AngularJS,则使用, 或关闭 html5 模式
http://example.com/item/1/
在其中放置一个重定向到的索引页面http://example.com/#!/item/1/
- 但是请注意,这需要为您创建的每个 /prettyPath/ 重复。
假设您使用的是 Apache 并且您的索引文件是 index.html,请在尝试其他两种解决方案之前尝试将以下内容添加到您的 .htaccess 文件中以创建重写规则。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /index.html/#/$1
</IfModule>
如果您使用的是没有服务器端逻辑的纯 AngularJS/Ajax 解决方案,请将 index.php 更改为 index.html(或 index.htm,具体取决于您的根索引文件名)。