【发布时间】:2023-10-01 01:07:02
【问题描述】:
我有一个使用page.js 设置的路由器,用于路由索引页面('/')、项目页面('/projects/<projectId>/')和静态(图像)文件。基本上,它看起来像这样:
JavaScript
init: function () {
page.base('/');
// IndexPage
page('', function (context, next) {
displayIndexPage();
});
// ProjectPage
page('projects/:project', function (context, next) {
displayProjectPage();
});
// image files
page(/^.+\.(jpg|png|gif|bmp)$/, function (context, next) {
window.location = '/' + context.path;
});
// Exit the middleware
page();
}
在我的/projects/ 文件夹中,我有一个.htaccess 文件,其中包含以下内容:
狂欢
Options +FollowSymLinks
RewriteEngine On
# html5 pushstate (history) support
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !index
RewriteRule ^.*$ ../index.html [QSA,L,NE]
路由通常工作正常。当我导航到静态图像文件时,.htaccess 将我从我的单页应用程序中删除,静态文件出现在屏幕上。但是,当我在浏览器中导航回来时,我不会重新进入我的应用程序; URL 更改,但没有导航,图像文件仍保留在屏幕上。再多的弹出或推送状态都无法让我回到我的应用程序中。
我不完全确定我在这里问的是正确的问题;不确定这是否与提供静态文件和路由单页应用程序一样多...我会对任何允许 page.js 在popState 上取回的答案感到满意。
编辑:我正在从我的RewriteRule 中免除文件,因为我需要在我的应用程序呈现的页面中提供它们。但是,当访问者单击呈现页面中的图像时,我希望浏览器仅显示该图像,不带任何标记。
【问题讨论】:
-
另外,我的围栏代码块做错了什么?为什么语法高亮在这里不起作用?
-
哦,糟糕,SO 不支持受保护的代码块。我猜太习惯了GH。谢谢@ariful-haque。
-
您到Page.js 的链接没有显示,因为您忘记在前面添加
https://。 -
您可以发布您正在使用的图片网址的示例吗?不确定您是否需要图像路由,因为如果图像文件路径退出,apache 不会绕过 index.html 直接提供它(
RewriteCond %{REQUEST_FILENAME} !-f) -
@ChrisGunawardena 这是该站点:transmote.com 单击任何项目,然后单击任何图像,然后浏览器导航返回查看问题。路由图像文件的目的是明确地脱离应用程序并允许 Apache 直接为它们提供服务;如果没有路由到应用程序出口,Apache 永远不会知道任何改变,因为一切都在 page.js 中发生。
标签: javascript .htaccess url-routing single-page-application static-files