Я определил такой маршрут:
$app->map(['GET', 'POST'],'/abc/[{url}]', function ($request, $response, $args) { return $response; })->add(new CustomMiddleware());
Он работает нормально, когда я передаю URL-адрес без http://
но дает мне 404 page not found
-Page с http://
или https://
. Я также пробовал строку с кодировкой url, но выдавал ту же ошибку:
http://localhost/slim/public/index.php/abc/http%3A%2F%2Fstackoverflow.com The requested URL /slim/public/index.php/abc/http://stackoverflow.com was not found on this server.
Я использую Slim Version 3.1.
Использование URL-адреса внутри URL-адреса
Когда вы добавляете url с Slashes, тогда маршрут не получает причину выполнения, тогда есть дополнительный путь после URL-адреса, который не определен внутри маршрута:
Например, example.org/abc/test
работает отлично, но example.org/abc/http://x
будет работать только с определением маршрута, таким как this /abc/{url}//{other}
.
Использование кодированного URL-адреса внутри URL-адреса
Apache блокирует весь запрос с %5C
для \
и %2F
для /
в URL-адресе с ошибкой 404 Not Found, из-за соображений безопасности. Таким образом, вы не получаете 404 из тонкой структуры, но с вашего веб-сервера. Таким образом, ваш код никогда не будет выполнен.
Вы можете включить это, установив AllowEncodedSlashes On
в вашем httpd.conf
apache.
Моя Рекомендация исправить это
Добавьте URL-адрес в качестве параметра get, который имеет место для кодирования косой черты без изменения конфигурации apache.
Пример вызова http://localhost/abc?url=http%3A%2F%2Fstackoverflow.com
$app->map( ['GET', 'POST'], '/abc', function ($request, $response, $args) { $getParam = $request->getQueryParams(); $url= $getParam['url']; // is equal to http://stackoverflow.com });