Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除#!从URL_Javascript_Url_Url Rewriting - Fatal编程技术网

Javascript 如何删除#!从URL

Javascript 如何删除#!从URL,javascript,url,url-rewriting,Javascript,Url,Url Rewriting,我正在努力改变 http://domain.co.uk/#!/pagename 到 我想去重新编写网址,然后意识到,因为它是一个单页网站,这将无法工作,所以我卡住了 在现有的代码库(一个快速的javascript函数)下,有没有办法做到这一点?或者这只是我不得不接受的东西 !!我猜是后者(我想可能会改为domain.co.uk#pagename),但我很高兴被证明是错的 基本原理非常简单: if (location.hash && (location.hash.substr(1

我正在努力改变

http://domain.co.uk/#!/pagename

我想去重新编写网址,然后意识到,因为它是一个单页网站,这将无法工作,所以我卡住了

在现有的代码库(一个快速的javascript函数)下,有没有办法做到这一点?或者这只是我不得不接受的东西


!!我猜是后者(我想可能会改为domain.co.uk#pagename),但我很高兴被证明是错的

基本原理非常简单:

if (location.hash && (location.hash.substr(1,1) === "!")) {
    location.replace(location.toString().replace('#!', "/"));
};
您只需要确保新的URL首先工作

这意味着:

  • 更新客户端代码以使用pushState和friends(因此停止生成hashbang URI)
  • 更新服务器端代码,以便在不依赖客户端代码的情况下以正确的状态交付站点的每个页面(以便(a)任何页面都可以快速高效地加载,(b)JavaScript成为性能提升的奖励,而不是讨厌搜索引擎的依赖性)

  • 感谢你的回答-我不够聪明,无法实现这一点,不幸的是,每当我尝试重新编写上述内容时,我的服务器都会将其视为一个单独的页面,并抛出一个404-对于一个单页面站点,我意识到没有办法绕过一个#-这是除非我错误地理解了上述内容??!!??这是一个单独的页面。参见答案中列出的先决条件列表中的第2点。一般来说,单页网站是一个糟糕的想法(这就是为什么Twitter出现了可怕的性能问题,并放弃了单页实现)。感谢您的指导-我看到了第2点-但就是不明白-您能给我指出正确的方向吗-我不知道如何让我的服务器服务于1个页面,但根据URL中的第二个参数转到该页面上正确的子部分,而不将其视为不同的页面-我想这是一个在此阶段重新编写的URL?对不起,如果我只是没有遵循,但我显然是一个ickle有点厚!没有涉及URL重写。如果您只想链接到页面的一个子部分,那么这将是一个带有
    且没有
    的URL。如果您想在使用JS操作DOM后以页面的状态链接到该页面,那么您可以找到HTML,该HTML将提供与从原始HTML开始并运行JS相同的效果,然后你将HTML服务给客户。谢谢-我想我现在得到了它,所以标记为已接受-可能会问另一个问题(与此问题分开!),但我们会看到:-P
    
    if (location.hash && (location.hash.substr(1,1) === "!")) {
        location.replace(location.toString().replace('#!', "/"));
    };