прямая косая черта urlencoded ломает URL - PullRequest
70 голосов
/ 13 июля 2010

О системе

У меня есть URL-адреса этого формата в моем проекте: -

http://project_name/browse_by_exam/type/tutor_search/keyword/class/new_search/1/search_exam/0/search_subject/0

Где пара ключевое слово / класс означает поиск по ключевому слову "class".

У меня есть общий файл index.php, который выполняется для каждого модуля в проекте.Существует только правило перезаписи для удаления index.php из URL: -

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Я использую urlencode () при подготовке поискового URL и urldecode () при чтении поискового URL.

Проблема

Только символ прямой косой черты нарушает работу URL, вызывая ошибку 404 страница не найдена.Например, если я ищу one/two URL-адрес

http://project_name/browse_by_exam/type/tutor_search/keyword/one%2Ftwo/new_search/1/search_exam/0/search_subject/0/page_sort/

Как это исправить?Мне нужно, чтобы 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

Ответы [ 13 ]

0 голосов
/ 22 апреля 2015

Я использую функцию javascript encodeURI () для части URL, которая имеет косую черту, которая должна рассматриваться как символы вместо адреса http.Например:

"/api/activites/" + encodeURI("?categorie=assemblage&nom=Manipulation/Finition")

см. http://www.w3schools.com/tags/ref_urlencode.asp

0 голосов
/ 07 ноября 2014

Стандартное решение этой проблемы - разрешить косые черты, сделав параметр, который может содержать косые черты, последним параметром в URL.

Для URL кода продукта у вас будет ...

mysite.com/product/details/PR12345/22

Для поискового запроса у вас будет

http://project/search_exam/0/search_subject/0/keyword/Psychology/Management

(ключевое слово здесь - психология / менеджмент)

Это не большой объем работы, чтобы обработать первые «именованные» параметры, а затем объединить оставшиеся в код продукта или ключевое слово.

В некоторых средах это средство встроено в их определения маршрутизации.

Это не относится к случаю использования с двумя параметрами, которые содержат косую черту.

0 голосов
/ 20 ноября 2011

Вы можете использовать %2F, если используете его таким образом:
?param1=value1&param2=value%2Fvalue

, но если вы используете /param1=value1/param2=value%2Fvalue, это выдаст ошибку.

...