【发布时间】:2018-12-11 11:44:49
【问题描述】:
我正在为一家公司做网站,我想使用 ASP.NET MVC 布局页面之类的东西将内容动态加载到布局中,但该公司使用的托管服务提供商不支持 ASP.NET .我以为他们支持 Node.js,因为他们说他们唯一不支持的是 .NET,所以我在 Express.js 中使用了一个名为 Embedded JavaScript Templates (http://ejs.co/) 的模板库,但后来找到了托管服务提供商也不支持Node。
绝对支持服务器端包含,但我的问题是我可以使用它们从用户导航的 url 中获取文件名,将其传递到 index.html 页面中的服务器端包含(我正在尝试的页面用作布局页面)并让 Web 服务器在包含标签所在的位置注入内容?到目前为止,我在服务器端看到的所有示例都包括以文字形式输入的文件名,例如:
<!--#include virtual="physicians.html" -->
而我希望包含的文件由用户导航到该站点时输入的内容来确定。如果它是http://website.com/physicians.html,那么应该在 index.html 文件中加载包含注入位置的“physicians.html”。像这样的东西(显然不起作用):
<!--#include virtual="${REQUEST_URI}" -->
我还尝试将以下内容添加到 .htaccess 文件中(请注意,我知道它不启用服务器端包含。我后来启用了 SSI 并且 SSI 正在工作,但不是按照我想要的方式,如上所述之前):
<ifModule mod_rewrite.c>
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.html
</ifModule>
这来自http://krasimirtsonev.com/blog/article/deep-dive-into-client-side-routing-navigo-pushstate-hash。我将上面的 .htaccess 配置与他的客户端库 Navigo 和一些 AJAX 一起使用。这是用于将内容加载到 index.html 文件中的 JavaScript(/views 是存储部分视图的位置):
function loadViewContent(viewPath)
{
$('#main-content').load(viewPath, navSetActive);
}
var root = "http://www.caduceuscorporation.com";
var router = new Navigo(root);
router.on({
'/': loadViewContent.bind(this, "views/home.html"),
'index.html': loadViewContent.bind(this, "views/home.html"),
'/:page': function(params) {
loadViewContent("views/" + params.page + ".html");
}
})
.resolve();
它工作得很好,除非我输入了一个无效的文件名,然后它会进入一个无限循环,在自身内部加载 index.html。 .htaccess 配置的作用是,如果路径无效,服务器会发回 index.html 的内容,因此 index.html 会无限循环加载自身。
有没有办法使用服务器端包含根据用户输入的 URL 而不是预先确定的文件来加载内容?或者我需要使用不同的 .htaccess 配置吗?我希望我已经说明了我想要做什么。如果 SSI 或不同的 .htaccess 配置不起作用,我想我可能不得不使用 PHP。我知道托管服务提供商肯定支持这一点。
【问题讨论】:
标签: .htaccess server-side-includes