想做一个个人博客的小功能做练习,想检测如这样的链接后缀:
http://example.com/?c=123123
通过 JS 来识别链接中的 ?c=123123 然后填转到指定链接,请问如何实现更好?谢谢!
首先需要建立 关键字符串与对应网址的一一对应表,一般存储在数据库里面。
然后 根据请求字符串 查寻数据库 实施跳转。不需要利用js.
跳转可以直接使用 header(),也可以使用js.
直接就会跳转了,为何需要用JS判断?
如果是说通过query string来判断需要呈现的内容,前端可以做到,但相比比来,后端更适合做这样的工作。
http://example.com/?d=123123#abc
?以后到#之前,这段内容称为query string。而#以后,称为url hash(注意,这里的hash和hash算法的hash不一样)。
二者有区别:
名称 | 地址形式 | 前端的获取方法 | 后端的获取 | 在前端修改之后造成网络请求 |
url hash | #… | window.location.hash | 取不到 | 不会 |
query string | ?a=&b=… | window.location.search | 取得到 | 是的 |
注意:
在前端:
- 修改query string,会发起网络请求,页面会刷新,这时前端的上下文已经发生了改变。因此不建议用前端判断/修改query string
- 修改url hash,不会发起网络请求,页面不会刷新,前端的上下文没有变化。
最好严格区分query string和url hash,query string用于后端判断,url hash用于前端判断。
因此:
- 在后端,可以用query string判断需要呈现什么
- 在后端,还可以构造这样的形式的地址做判断
http://example.com/c/123123
- 在前端,用query string判断用以呈现的内容,不如用url hash判断用以呈现的内容(query string应该是后端的事情)。这样做,一般是用于区分:同一个页面,通过ajax来获取了不同的数据。用户可以粘贴这个地址到其他地方,依然可以回到用户当前所在的状态。
query string和hash的区别还可以看这个slideshare。(打不开?你懂得)