我有一个多语言 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
。