用户可以搜索我的网站。有时他们可能会使用包含正斜杠的搜索词(使用/斜杠搜索),当表单提交时,会在网址中转换为%2F。
例如。 www.mysite.com/search/search+with+%2F+slash
我使用了here的答案,该答案非常适合给我正确的页面,而不是将我发送给404.
我现在的问题是我在页面上使用分页和自定义过滤器,它们都作为url中的get vars传递,当访问GET var时它是空的。
例如。 www.mysite.com/search/search+with+%2F+slash?page=2
这是我目前的路线
$this->get('search/{search_term}', ['uses' => 'SearchController@search'])
->where('search_term', '(.*(?:%2F:)?.*)');
不确定从这里做什么
答案 0 :(得分:1)
在URL的路径组件中包含编码斜杠(%2F
)不是一个好主意。 The HTTP RFC说这个序列应该与真正的斜杠“等效”:
“保留”和“不安全”集中的字符以外的字符(请参阅 RFC 2396 [42])等同于它们的“”%“HEX HEX”编码。
实际上,这些URL的处理方式不一致。一些Web服务器(甚至一些浏览器!)会将%2F
视为等效于真正的斜杠,有些会以不同的方式对待它,而某些工具(包括一些Web应用程序防火墙和代理)将拒绝包含此类的URL序列
如果您需要在URL中包含这样的用户输入,则应该将其放在查询字符串(/search/?q=search+with+%2f+slash
)中。