GET для идентификаторов фрагментов не / не должны (некоторые ошибочные клиенты могут отправлять их) появляются в HTTP-запросе, поэтому у вас не может быть правила перезаписи, соответствующего им, независимо от веб-сервера.
Механизм HTTP не может делать никаких предположений по этому поводу. Серверу даже не дано.
Если вы попытались сделать первоначальный запрос на / перенаправление на / #! вместо того, чтобы обслуживать корневой индекс, вы получите ошибку «слишком много перенаправлений», так как клиент вернется с запросом / снова (помните, что он не будет отправлять # с запросом). Вам нужно будет сделать это с помощью JavaScript вместо индексного документа .
Суть в том, что он не доступен на стороне сервера в запросе GET. Даже локон был пропатчен чтобы больше его не отправлять.
Вы можете иметь директивы определения местоположения nginx, чтобы все остальное попадало на фронт-контроллер:
location = / {
}
location = /index.html {
}
location ~ / {
rewrite ^ /#!$uri redirect;
break;
}
Остерегайтесь этого подхода, хотя; http://jenitennison.com/blog/node/154 дает гораздо больше подробностей о разгоне хэшбанга в Gawker и других проблемах, связанных с его использованием.