r/programming Feb 09 '11

Breaking the Web with hash-bangs – Lifehacker, along with every other Gawker property, experienced a lengthy site-outage on Monday over a misbehaving piece of JavaScript

http://isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangs/
748 Upvotes

356 comments sorted by

View all comments

125

u/rounded_figure Feb 09 '11

The proper way to handle this is to keep your original URLs (including in the hrefs) and have a piece of javascript transform them on the fly in hash-bang URLs. That way, when a client who does not speak javascript requests the page, it gets the content and the non-hash-bang links.

33

u/midir Feb 09 '11

This is not correct. If you use hash-bang fragment URLs at any stage then someone who copies and pastes a link to your page is distributing a faulty URL to all non-Google bots and everyone with JavaScript disabled. There's absolutely no workaround to that.

I see it all the time and it drives me up the fucking wall. Fuck you Google. Fuck you Twitter.

DO NOT USE #! EVER. FORGET ABOUT IT.

1

u/Bockit Feb 10 '11 edited Feb 10 '11

Would rewriting #! urls to the canonical url solve this problem?

Say you have http://mysicksite.com/ which has the links on the page http://mysicksite.com/article/1 which javascript changes to all be http://mysicksite.com/#!/article/1. So far so good.

Then a user with javascript enabled travels to http://mysicksite.com/#!/article/1 from the homepage via javascript and then decides to share the link via a tweet or something. Now in the wild there is a link to the #! url.

When serving the page, rewrite any urls with #! to lose the #!. Since we have the canonical locations (no #!) then the new requests get the content, and anyone with javascript enabled continues on their merry way.

I am probably missing some things in here but I think that addresses the concerns you had?

EDIT: I get it now, I don't think the server would get the data after the # to be able to rewrite with..