htaccess unescaping chars on redirect

时间:2016-01-03 04:04:00

标签: apache .htaccess redirect

我正在创建一个将搜索重定向到搜索页面的搜索页面。

因此,如果有人输入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,没有理由。我的问题不清楚还是什么?

1 个答案:

答案 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