Передача URLENCODED URL в качестве параметра контроллеру / действию при CakePhp

StackOverflow https://stackoverflow.com/questions/4750989

Вопрос

Я довольно новый на CakePhp, и из -за этого есть некоторые основные вещи, которые я раньше делал с Zend Framework, которые я избил тортом.

Я работаю над проектом, где я должен передать названный параметр контроллеру / действию. Настройка маршрута и передача параметра довольно проста, моя проблема заключается в том, когда параметр является Urlencodied URL.

Например: http://www.cakephp.com/controller/action/http%3A%2F%2Fwww.google.com Независимо от настройки контроллера и действия, выбросит 404, но прохождение/controller/action/http://www.google.com каким -то образом работает, единственная проблема заключается в том, что он идентифицирует HTTP как именованный параметр. Другим образом, если я сделаю/Concroller/action?url=http://www.google.com, это будет работать.

Работа, которую я использовал для этого, состоит в том, чтобы пройти значение в виде строки, закодированной Base64, но оно придает некоторые ограничения. Например, если это API, вы не можете гарантировать, что система, использующая API, может кодировать Base64 строку.

В любом случае, лучшим решением будет все еще передавать строку, закодированную URL, именованному параметру. Вопрос в том, почему CakePhp не принимает строку Urlencode в качестве параметра и почему он бросает 404?

Спасибо все заранее.

Это было полезно?

Решение

Я добавил работу по этой проблеме. Предыдущий ответ, который указывал на пост, на самом деле ответил, почему это происходило, и одно из решений. Что происходит, так это то, что обходной путь для .htaccess на Apache немного опасен, потому что он отключит критерии безопасности.

Есть 2 способа разрабатывать это с помощью кода (и я использую оба):

  1. Отправить все URL -адреса в качестве кодированных строк BASE64
  2. Примите URL -адреса в виде названных параметров, но, как вы заметите, он преобразует любую http: // http:/, поэтому необходимо правильно идентифицировать, когда это происходит, и только затем исправить строку.

Это далеко не прекрасное решение, но это определенно практично.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top