【发布时间】:2012-07-20 05:25:02
【问题描述】:
prettyPhoto 使用主题标签,但如果它们被编码(到 %23),大多数浏览器都会出现 404 错误。这个has been discussed before:
您会收到 404 错误,因为 #callback 部分不是 URL 的一部分。 是浏览器使用的书签,从不发送 对服务器的请求。如果您对哈希进行编码,它将成为 而是文件名。
为什么哈希会因为它是 URI 编码而成为文件的一部分?不是bug吗?
-
我问是因为prettyPhoto 使用主题标签并遇到同样的问题。我想添加一个'?在哈希是最优雅的解决方案之前,我只是有点茫然如何在现有代码中做到这一点:
函数getHashtag(){ 网址=位置.href; hashtag=url.indexOf('#gallery')!==-1)?decodeURI(url.substring(url.indexOf('#gallery')+1,url.length)):false; 返回标签; } 函数 setHashtag(){ if(typeof theRel=='undefined')return; location.hash=theRel+'/'+rel_index+'/'; } 函数 clearHashtag(){ if(location.href.indexOf('#gallery')!==-1)location.hash=""; } 还有其他建议吗?我会考虑调整我的 404 页面,但这似乎更像是处理问题而不是阻止它。
谢谢!
编辑:显然,prettyphoto 处理这些哈希的方式没有任何问题,我最终将这些规则添加到我的 apache 服务器:
RewriteRule ^(.*).shtml(%23|#)$ /$1.shtml [R=301,NE,L]
RewriteRule ^(.*).shtml([^g]+)gallery(.+)$ /$1.shtml#gallery$3 [R=301,NE,L]
他们成功处理了 %23 引起问题的案例。
【问题讨论】:
-
合并 ?在上面的代码中,您似乎可以修改已定义为读取 url=location.href+'?'的 'url' var?
-
另请注意,SO 问题标签“哈希”明确指的是哈希算法。 URL/HTML 功能最好归类为“锚”。
标签: javascript hash webkit hashtag