Intereting Posts

Как отправить URL-адрес в параметре маршрута?

Я определил такой маршрут:

$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 });