关于系统
我的项目中有这种格式的URL: -
http://project_name/browse_by_exam/type/tutor_search/keyword/class/new_search/1/search_exam/0/search_subject/0
Run Code Online (Sandbox Code Playgroud)
其中关键字/类对意味着使用"class"关键字进行搜索.
我有一个常见的index.php文件,它为项目中的每个模块执行.只有一个重写规则可以从URL中删除index.php: -
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
我在阅读搜索URL时准备搜索URL和urldecode()时使用urlencode().
问题
只有正斜杠字符会破坏导致404页面未找到错误的URL.例如,如果我搜索one/twoURL是
http://project_name/browse_by_exam/type/tutor_search/keyword/one%2Ftwo/new_search/1/search_exam/0/search_subject/0/page_sort/
Run Code Online (Sandbox Code Playgroud)
我该如何解决?我需要将index.php隐藏在URL中.否则,如果不需要,那么正斜杠就没有问题了,我可以使用这个URL: -
http://project_name/index.php?browse_by_exam/type/tutor_search/keyword/one
%2Ftwo/new_search/1/search_exam/0/search_subject/0
Run Code Online (Sandbox Code Playgroud) 首先,如果这是一个糟糕的问题/做法,我们深表歉意。我对 Laravel 很陌生,所以我仍在掌握它。
我试图在 Laravel 5 路由中传递一个包含正斜杠 (/) 和反斜杠 () 的变量,但遇到了一些困难。
我使用的是以下情况:api.dev/api/v1/service/DfDte\/uM5fy582WtmkFLJg==。
尝试 1:
我的第一次尝试使用了以下代码,结果自然是 404。
路线:
Route::group(array('prefix' => 'api/v1'), function() {
Route::resource('service', 'ServiceController');
});
Run Code Online (Sandbox Code Playgroud)
控制器:
public function show($service) {
return $service;
}
Run Code Online (Sandbox Code Playgroud)
结果:
404
Run Code Online (Sandbox Code Playgroud)
尝试 2:
我在 StackOverflow 上做了一些搜索并最终使用了以下代码,这几乎可以工作,但是,它似乎正在将 \ 转换为 /。
路线:
Route::group(array('prefix' => 'api/v1'), function() {
Route::get('service/{slashData}', 'ServiceController@getData')
->where('slashData', '(.*)');
});
Run Code Online (Sandbox Code Playgroud)
控制器:
public function getData($slashData = null) {
if($slashData) {
return $slashData;
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
DfDte//uM5fy582WtmkFLJg==
Run Code Online (Sandbox Code Playgroud)
如您所见,它正在传递 var 但似乎正在将 \ 转换为 /。
我正在尝试创建一个 API,但不幸的是,我传递的变量超出了我的控制(例如,我不能简单地不使用 \ …
用户可以搜索我的网站。有时,他们可能会使用包含正斜杠的搜索词(使用 / 斜杠搜索),当通过表单提交时,该搜索词会在 url 中变成 %2F。
例如
www.mysite.com/search/search+with+%2F+slash
Run Code Online (Sandbox Code Playgroud)
我已经使用了这里的答案,它非常适合给我正确的页面并且不会返回 404。
我现在的问题是我在页面上使用分页和自定义过滤器,它们都作为 url 中的 get var 传递,并且在访问 GET var 时它是空的。
例如
www.mysite.com/search/search+with+%2F+slash?page=2
Run Code Online (Sandbox Code Playgroud)
这是我目前的路线
$this->get('search/{search_term}', ['uses' => 'SearchController@search'])
->where('search_term', '(.*(?:%2F:)?.*)');
Run Code Online (Sandbox Code Playgroud)
不知道从这里做什么