【发布时间】:2016-11-07 09:52:00
【问题描述】:
我正在创建一个“静态”网站,我想要这样的网址:
http://www.my-website/my-page-1 或 http://www.my-website/my-page-2
我使用 jQuery 方法 load() 来加载我的网页内容。 这是我的 index.html :
<body>
<nav>
<ul >
<li id="my-page-1-menu-item" class="menu-item" onclick="changeState('my-page-1')">
<span><a>Link 1</a></span>
</li>
<li id="my-page-2-menu-item" class="menu-item" onclick="changeState('my-page-2')">
<span><a>Link 2</a></span>
</li>
</ul>
</nav>
<!-- Content, loaded with $.load() -->
<div id="content"></div>
</body>
我知道如何在不重新加载页面的情况下更改我的网址,使用 history API
这是我的javascript:
function changeState(url) {
window.history.pushState(url, 'Title', url);
loadStateData(url);
}
function loadStateData(state) {
var content = '#content';
$(content).load( 'views/' + state + '.html');
// Manage menu style
$('.menu-item').removeClass('active');
$('#' + state + '-menu-item').addClass('active');
}
使用此代码,我可以通过单击 Link 2 访问 http://www.my-website/my-page-2,但如果我刷新网页或直接在浏览器地址栏中输入 http://www.my-website/my-page-2,则会收到 404 错误。
我对 .htaccess URL 重写不太满意,但我认为它应该可以解决我的问题。
而且我不想使用 AngularJS 或其他类似的框架(除非它是一个非常轻量级的框架)
【问题讨论】:
-
您必须向 onload 事件添加一个事件处理程序,该事件处理程序将检查 url 并在 url 包含您拥有的页面时触发 changeState。然后进入为“主页”提供服务的网络服务器的设置,并将所有到“my-website”的流量重新路由到这个主页,所以无论这个 url 后面的页面是什么,它都会转到“主页” ' 并触发检查是否必须调用 changeState 的事件。或者使用哈希片段而不是完整的 url,那么您不必编辑任何服务器设置,尽管这“不太漂亮”。
标签: javascript html .htaccess url url-rewriting