О системе
У меня есть URL-адреса этого формата в моем проекте: -
http://project_name/browse_by_exam/type/tutor_search/keyword/class/new_search/1/search_exam/0/search_subject/0
Где keyword/class
pair означает поиск по ключевому слову "class".
Ниже приведен мой файл htaccess: -
##AddHandler application/x-httpd-php5 .php
Options Includes +ExecCGI
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
############To remove index.php from URL
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
#################################################end of find a class
</IfModule>
У меня есть общий файл index.php, который выполняется для каждого модуля в проекте.Существует только правило перезаписи для удаления index.php из URL (как вы можете видеть выше).
Я не использую никаких правил перезаписи htaccess для определения массива $ _GET.У меня есть функция парсера URL в PHP внутри, которая делает это вместо этого.Для примера URL, который я дал, парсер возвращает: -
Array ( [a] => browse_by_exam [type] => tutor_search [keyword] => class [new_search] => 1 [search_exam] => 0 [search_subject] => 0 )
Я использую urlencode () при подготовке поискового URL и urldecode () при чтении поискового URL
Проблема
У меня проблемы с некоторыми символами в URL
Character Response
% 400 - Bad Request - Your browser sent a request that this server could not understand.
/ 404 - Not FOund
\ # + Page does not break but urldecode() removes these characters.
Я хочу разрешить все эти символы.В чем может быть проблема?Как мне это разрешить?Пожалуйста, помогите Спасибо, Sandeepan
Обновления
Теперь только / символ вызывает разрыв URL (ошибка 404, как и раньше).Итак, я попытался удалить правило перезаписи htaccess, которое скрывает index.php в URL, и попытался использовать полный URL.Для поискового запроса class/new
я попытался использовать следующие два URL: -
http://project_name/index.php?browse_by_exam/type/tutor_search/keyword/class%2Fnew/new_search/1/search_exam/0/search_subject/0
http://project_name/index.php/browse_by_exam/type/tutor_search/keyword/class%2Fnew/new_search/1/search_exam/0/search_subject/0
И первый работает, а второй - нет.Обратите внимание на index.php?browse_by_exam
в первом.
Но я не могу использовать первое соглашение об URL.Я должен сделать / работать с index.php скрытым.Пожалуйста, помогите
Еще раз спасибо Sandeepan
Редактировать (решено)
Учитывая ответ Бобинса на другой мой вопрос
urlencodedПрямая косая черта ломает URL , я чувствую, что лучше иметь такие URL-адреса: - http://project_name/browse_by_exam?type/tutor_search/keyword/class
%2Fnew/new_search/1/search_exam/0/search_subject/0
Таким образом я избавляюсь от сложности читаемости, вызванной соглашением ¶m1=value1¶m2=value2
, а также могуразрешить прямую косую черту в части строки запроса с помощью ?
Я хочу избежать AllowEncodedSlashes, потому что Бобинс сказал Also some tools or spiders might get confused by it. Although %2F to mean / in a path part is correct as per the standard, most of the web avoids it.