我正在编写一个使用 HTML5 历史 API 的 Backbone.js 应用程序。我希望用户能够创建以下形式的 URL:
domain.com/any
domain.com/random
domain.com/paththattheuserlikes
并将所有这些 URL 路由到我的index.html
页面,Backbone 路由器将采用路径并适当地处理请求。
我的问题是:如何设置 Apache 以将所有到该域的请求路由到index.html
,同时保持路径不变以便 Backbone 路由器正确处理请求?
我知道如何进行简单的 Apache 重定向,但我担心这会删除路径。
答案1
在您的 Apache 配置文件中,输入以下几行:
RewriteEngine On
RewriteRule ^/[a-zA-Z0-9]+[/]?$ /index.html [QSA,L]
这会将所有由字母数字字符组成的请求重写为 index.html,同时仍保留查询字符串和仍然显示为来自与输入相同的路径。因此,如果用户转到 yourdoma.in/someoldpath,则会显示 index.html,但地址栏仍会显示 yourdoma.in/someoldpath。
正如第一位发帖人提到的,如果您想知道输入了哪条路径,您可以将上面的第二行更改为:
RewriteRule ^/([a-zA-Z0-9]+)[/]?$ /index.html?pathtyped=$1 [QSA,L]
这会将输入到 index.html 的原始路径传递到“pathtyped”请求变量中。
答案2
如果不想丢失原始路径,则需要将它们(或替换)包含在目标页面的查询字符串中以便能够获取和处理它们。