Sobre el sistemaurlencoded Barra inclinada está rompiendo URL
que tienen direcciones URL de este formato en mi proyecto: -
http://project_name/browse_by_exam/type/tutor_search/keyword/class/new_search/1/search_exam/0/search_subject/0
Dónde par de palabras clave/clase significa búsqueda con la palabra clave "clase".
Tengo un archivo index.php común que se ejecuta para cada módulo en el proyecto. Sólo hay una regla de reescritura para eliminar el index.php desde la URL: -
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
estoy usando urlencode() mientras se prepara la URL de búsqueda y urldecode(), mientras que la lectura de la URL de búsqueda.
Problema
Sólo el carácter de barra diagonal está rompiendo URL causando 404 página no se encuentra el error. Por ejemplo, si la búsqueda one/two
la URL es
http://project_name/browse_by_exam/type/tutor_search/keyword/one%2Ftwo/new_search/1/search_exam/0/search_subject/0/page_sort/
¿Cómo puedo solucionar esto? Necesito mantener index.php oculto en la URL. De lo contrario, si eso no era necesario, no habría habido ningún problema con la barra inclinada y podría haber utilizado este URL: -
http://project_name/index.php?browse_by_exam/type/tutor_search/keyword/one
%2Ftwo/new_search/1/search_exam/0/search_subject/0
Siento que lo mejor es tener URLs como esta: - 'http: // nombre_del_proyecto/browse_by_exam? Type/búsqueda_prueba/palabra clave/clase% 2Fnew/new_search/1/search_exam/0/search_subject/0' De esa forma me deshago de lo difícil y de legibilidad causada por & param1 = value1 & param2 = value2 convención y también puedo permitir barras diagonales (ahora en la parte de la cadena de consulta usando '?') Evitaré AllowEncodedSlashes porque Bobince dijo 'También podrían obtenerse algunas herramientas o arañas confundido por eso. Aunque% 2F significa/en una parte de ruta es correcta según el estándar, la mayoría de la web lo evita. url .htaccess url-routing –
puede usar% 2F si se usa de esta manera? Param1 = value1 & param2 = value% 2Fvalue pero si usa/param1 = value1/param2 = value% 2Fvalue lanzará un error. – Ahmad
Relacionado: [Es una barra diagonal ("/") equivalente a una barra diagonal codificada ("% 2F") en la porción de ruta de una URL HTTP] (http://stackoverflow.com/q/1957115/95735) –