如何使用 htaccess 替换 URL 中的撇号?

如何使用 htaccess 替换 URL 中的撇号?

我有一个带有搜索框的网站。搜索词作为 $_GET 的一部分传递到搜索页面(我使用的是 PHP,但我认为这与我遇到的问题无关),所以我的最终 URL 应该是 www.example.com/search.php?searchterm=smith。但是,我发现如果搜索词中包含撇号(例如 www.example.com/search.php?searchterm=o'hagen),服务器将返回 406 错误。我想我可以在 htaccess 文件中捕获此问题并将其重写为可用的内容,但到目前为止我还没有做到。到目前为止,我尝试过以下方法:

RewriteRule ^([^/]*)'([^/]*)$ $1\'$2 [N,E=redirect:1]

RewriteRule ^([^/]*)'([^/]*)$ $1%27$2 [N,E=redirect:1]

这些都对我没什么用。有人能建议我可以用什么来代替吗?

编辑:目前我已经将搜索表单更改为 POST 并在代码中处理它,但我仍然好奇如何让 apache 接受 GET 查询字符串中的搜索词。

答案1

也许您在 URL 中得到的不是撇号,而是卷曲的单引号......这会逃避您的正则表达式?

答案2

为什么不直接使用 POST 呢?如果你确实需要在 URL 中添加搜索词,则可以将其 POST 到中间脚本,对其进行 urlencode 编码,然后基本上透明地重定向浏览器:

表单帖子发送至“s.php”:

<?php if (isset($_POST['search'])) { $s = urlencode($_POST['search']); header("Location: /search.php?searchterm=$s"); ?>

重定向到带有“安全”编码字符串的search.php脚本。

相关内容