关于系统
我的专案中有这种格式的网址:
http://project_name/browse_by_exam/type/tutor_search/keyword/class/new_search/1/search_exam/0/search_subject/0
关键字/类别对表示使用“类别”关键字进行搜索。
我有一个通用的index.php文件,该文件针对项目中的每个模块执行。只有重写规则才能从URL中删除index.php:-
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
我在准备搜索URL时使用urlencode(),在阅读搜索URL时使用urldecode()。
问题
仅正斜杠字符破坏了URL,导致404页面未找到错误。例如,如果我搜索one/two
的网址是
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
http://project_name/browse_by_exam?type/tutor_search/keyword/class %2Fnew/new_search/1/search_exam/0/search_subject/0
这样,我就摆脱了&param1 = value1&param2 = value2约定引起的可读性难题,而且我还可以允许正斜杠(现在在查询字符串部分使用?
)我会避免AllowEncodedSlashes,因为Bobince说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.
url .htaccess url-routing