在 Apache 中,是否可以从一个 URL 提供数据,同时在浏览器中显示单独的 URL?

在 Apache 中,是否可以从一个 URL 提供数据,同时在浏览器中显示单独的 URL?

我有一个多语言 Web 应用程序,它依赖于 URL 中的语言代码。

例子:

example.com/zh-hans/title

客户现在想要一个新的结构:

example.com/cn/title

问题是该应用程序是围绕使用 构建的zh-hans。由于 URL 的这一部分是应用程序正常运行所必需的参数,因此更改它会破坏应用程序。此外,不可能在应用程序中更改它以适应这种情况。这将需要 100 个小时的工作才能撤消。

浏览器是否可以显示一个 URL,而后台数据由另一个 URL 提供,从而保留功能?

Apache 文档指出:

假设我们最近将页面 foo.html 重命名为 bar.html,现在想要提供旧 URL 以实现向后兼容。但是,我们希望旧 URL 的用户甚至无法识别页面已重命名 - 也就是说,我们不希望浏览器中的地址发生变化。

https://httpd.apache.org/docs/2.4/rewrite/remapping.html(从旧到新(内部))

那么,这个问题的解决就这么简单吗?

RewriteEngine  on
RewriteRule    "^/zh-hans/(.+)"  "/cn/$" [PT]

答案1

RewriteEngine  on
RewriteRule    "^/zh-hans/(.+)"  "/cn/$" [PT]

如果“客户现在想要一个新的结构:example.com/cn/title”那么看起来你的重写指令应该反过来?例如:

RewriteRule    ^/cn/(.+)  /zh-hans/$1 [PT]

您仍然需要将应用程序中可见的 URL 结构更改为显示example.com/cn/title(毕竟客户端“想要一个新的结构”),然后在内部将其重写为example.com/zh-hans/title,以便您的底层应用程序可以理解它。

但是,它仍然依赖于您的 Web 应用程序按预期读取 URL。例如,如果它查看REQUEST_URI(或等效内容),那么它仍然会看到example.com/cn/title

相关内容