我有一个search框的网站。 search字词作为$ _GET的一部分传递给search页面(我使用的是PHP,但我认为这与我遇到的问题无关),所以我的最终url就像www.example.com/ search.php中?search关键词=史密斯。 但是,我发现如果在search词中包含撇号(例如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]
这些对我都没有好处。 任何人都可以build议我可以使用呢?
编辑:目前我已经去改变searchforms到POST和在代码中处理这个,但我仍然好奇,我怎样才能让Apache接受GET查询string中的search字词。
也许你在URL中得到的不是一个撇号,而是一个curl的单引号..它逃避你的正则expression式?
为什么不使用POST呢? 如果您确实需要URL中的search字词,则可以将其发布到中间脚本,对其进行urlencode,然后基本上透明地redirect浏览器:
将post张贴到“s.php”:
<?php if (isset($_POST['search'])) { $s = urlencode($_POST['search']); header("Location: /search.php?searchterm=$s"); ?>
redirect到一个“安全”编码的string到您的search.php脚本。