我正在创建一个将搜索重定向到搜索页面的搜索页面。
因此,如果有人输入hey!@#$
并进行搜索,则网址将为http://localhost:8888/search/hey%21%40%23%24
,但搜索结果为hey!@
但是,如果我输入直接网址http://localhost:8888/search.php?s=hey%21%40%23%24
,则结果为hey!@#$
这意味着我的重定向是无意义的字符。如何保持角色逃脱?
这是我的htaccess代码。
RewriteRule ^search/(.*)$ search.php?s=$1 [NC,L]
编辑:我不理解downvotes,没有理由。我的问题不清楚还是什么?
答案 0 :(得分:1)
%23
被解释为#
,这是一个锚(Learn more here)。例如,https://en.wikipedia.org/wiki/PHP#Mascot直接转到Mascot副标题,https://en.wikipedia.org/wiki/PHP%23Mascot也是如此。
换句话说,#$未在http://localhost:8888/search/hey%21%40%23%24中转义,而是被忽略。这就是为什么第二个例子似乎是" unescaped"。
至于如何防止它被转义,你可以尝试添加' B'标记为重写规则:
RewriteRule ^search/(.*)$ search.php?s=$1 [B,NC,L]
点击此处了解有关标签的更多信息 - > https://httpd.apache.org/docs/2.2/rewrite/flags.html