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