是否可以将 apache2 配置为接受附加在 url 末尾的查询字符串(当由 `/` 字符分隔时)?

Is it possible to configure apache2 to accept query strings appended at the end of a url when separated by the `/` character?

例子... https://myisp.com/mypage.html/foobar 我希望能够在 mypage.html 上有一些 js 运行 可以读取 foobar 就好像它是一个查询参数一样。我了解如何编写必要的 js,但我想了解是否可以将 Apache 配置为提供 html 页面并将最终术语传递给页面上的脚本 运行。

当在可见 URL 浏览器看到的。

使用 Apache mod_rewrite,您可以在内部重写将 /foobar 转换为查询字符串的请求 - 但这是服务器内部的。 browser/JavaScript 没看到。

您可以实施外部重定向并明显地将 URL 从 /mypage.html/foobar 转换为 /mypage.html?foobar(或 /mypage.html?/foobar)——但我认为这不是您所需要的.

但是,您无需将其转换为 JavaScript 的查询字符串即可读取...

/mypage.html/foobar

有效文件名后以斜杠开头的部分(例如本例中的 /foobar)称为附加路径名信息(又名“path-info”)。通常,Apache 在 text/html 文件的默认文件处理程序上拒绝此类请求,因此上述请求通常会导致 404 Not Found 响应。

但是,您可以通过在根 .htaccess 文件的顶部包含以下指令,在所有 URL 上允许 path-info:

AcceptPathInfo On

Apache 现在将提供 /mypage.html 而不是生成 404。浏览器会看到完整的 URL,即。 /mypage.html/foobar 并且 location 对象(即 window.location.pathname)的 pathname 属性 中的 JavaScript 可用,然后您可以将其解析为提取 /foobar(或 foobar)。

例如:

// Request "/mypage.html/foobar"
let pathInfo = /\.html\/(.*)/.exec(window.location.pathname)[1];
console.log(pathInfo); // foobar

pathInfo 就是您的“查询字符串”。