Apache:使用索引页为域上的所有 URL 提供服务,而无需重写路径?

Apache:使用索引页为域上的所有 URL 提供服务,而无需重写路径?

我正在编写一个使用 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

如果不想丢失原始路径,则需要将它们(或替换)包含在目标页面的查询字符串中以便能够获取和处理它们。

相关内容