![Apache:使用索引页为域上的所有 URL 提供服务,而无需重写路径?](https://linux22.com/image/573871/Apache%EF%BC%9A%E4%BD%BF%E7%94%A8%E7%B4%A2%E5%BC%95%E9%A1%B5%E4%B8%BA%E5%9F%9F%E4%B8%8A%E7%9A%84%E6%89%80%E6%9C%89%20URL%20%E6%8F%90%E4%BE%9B%E6%9C%8D%E5%8A%A1%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E9%87%8D%E5%86%99%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我正在编写一个使用 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
如果不想丢失原始路径,则需要将它们(或替换)包含在目标页面的查询字符串中以便能够获取和处理它们。