tomcat - Tomcat Rewrite Valve - 如何在客户端浏览器上保留漂亮的 URL
问题描述
我正在使用 Tomcat Rewrite Valve API,以便我可以将我的 webapp URL 发布为“漂亮的 URL ”。我的问题是,在 URL 重写成功后,浏览器 url 地址并没有保留漂亮的 URL,而是显示到我最初试图隐藏的最终丑陋的 URL,因此违背了使用这个漂亮 API 的目的。我了解 Apache mod_rewrite 模块,浏览器会保留用户在成功重写后输入的漂亮 URL;因此从肉眼中隐藏了细节的 URI 和参数。是否可以使用 Rewrite Valve API 来实现这一点?如何?
配置
服务器 = Tomcat Apache 9.0.30
[webapp] /META-INF/context.xml
<Context override="true" >
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>
[webapp] /WEB-INF/rewrite.config
RewriteRule ^/support/contactUs/?$ ?page=page_supportID&fragment=fragment_contactUsID [NC,L]
用例:用户在他们的浏览器上输入漂亮的 URL:http://example.com/support/contactUs
预期:重写规则应用并打开实际(丑陋的) URL = http://example.com?page=page_supportID&fragment=fragment_contactUsID
,用户浏览器仍然显示漂亮的 URL = http://example.com/support/contactUs
。
实际:应用重写规则并打开实际(丑陋的) URL = http://example.com?page=page_supportID&fragment=fragment_contactUsID
。但是,浏览器 url 地址也向用户显示了那个丑陋的 url,而不是保留漂亮的。
解决方案
不可能!
但是,我希望我错了!在研究了更多这种行为之后,对于 URL 重写方案,我们可能无法控制客户端浏览器如何使用此 API 处理和在其 url 栏上显示重定向后的 URL。
Tomcat RewriteValve API 已经完成了它应该做的事情 = 通过DEFAULT在重定向 URL 时正确HTTP status code 302
返回给客户端。每个Tomcat 文档:
如果没有给出代码,将返回 302(FOUND,previous MOVED TEMPORARILY)的 HTTP 响应。
我们可以通过读取网络 HTTP 请求/响应堆栈跟踪来确认。对于这个问题,HTTP 响应 302 是我们期望看到的。每个MDN 文档:
HTTP 302 Found ... 浏览器重定向到此页面,但搜索引擎不更新其指向资源的链接 ... 即使规范要求在执行重定向时不更改方法(和正文),而不是所有用户代理都符合这里 - 你仍然可以在那里找到这种类型的错误软件。
哎呀!
推荐阅读
- javascript - Angular Firestore 加入集合不起作用
- arduino - 从 Arduino IDE 上传到 ESP8266 时出错
- amazon-web-services - 将数据从 AWS IoT 发送到 SQS FiFo 时出错
- python - Kivy Image 不显示某些 jpg 图像
- angular - 当在 Angular 8 中有导入的样式表时,如何使用 SCSS 更改字体颜色?
- lua - 安装 Lua 库的特定分支
- python - 如何为函数的每次交互计时?
- java - Java 保持 pojo 数据存储独立
- c# - 是否可以从 ASP.NET MVC 中的视图返回多个项目
- arrays - 如何从列表中删除所有重复项并使用 Python 更改对重复项的所有引用