URL中的特殊字符#不适用于RewriteRule apache httpd

j0pj023g  于 2022-11-25  发布在  Apache
关注(0)|答案(1)|浏览(147)

我可以重新定向

https://my.bank.com/caweb/ptbmc/appInfo

到维护页面

https://my.bank.com/maintain.html

目录httpd-ssl.conf

RewriteEngine on
RewriteCond %{QUERY_STRING} /caweb/#/ptbmc
RewriteRule (.*) https://my.bank.com/
RewriteRule ^(/caweb/ptbmc.*)$ /maintain.html [PT]

但是,我现在需要重定向包含特殊字符#(即https://my.bank.com/caweb/#/ptbmc/appInfo)的URL
到维护页面

https://my.bank.com/maintain.html

我尝试将RewriteRule更改为-〉RewriteRule ^(/caweb/#/ptbmc.*)$ /maintain.html [NE],但效果不佳。
你能建议我必须在重写规则中做什么修改才能让它工作吗?

wko9yo5t

wko9yo5t1#

Wikipedia(着重号为mine):
在URI中,散列标记#在URL末尾附近引入可选片段。URI的通用RFC 3986语法还允许通过问号?引入可选查询部分。在具有查询和片段的URI中,片段跟随在查询之后。查询部分取决于URI方案,并由服务器进行评估-例如,http:支持与ftp:不同的查询。片段取决于文档MIME类型,并由客户端(Web浏览器)进行评估。客户端在检索文档时不应向服务器发送URI片段,并且如果没有本地应用程序(请参阅下文)的帮助,片段不会参与HTTP重定向。
所以,正如我在评论中所说的:你不能把服务器端的#签名作为重定向的条件,因为服务器永远不会看到它。浏览器应该不会发送它。
在这种情况下,如果您需要任何重定向,您要么需要在浏览器端进行(例如在Javascript中),要么重写最初生成的HTML,要么生成不依赖于#的不同URL。

相关问题