2012-06-29 14 views
11

He escrito mi propio marco MVC en PHP, que utiliza las direcciones URL en el formato de:¿Hay algún inconveniente en el uso de barras diagonales dobles en las URL?

/controller/method/param1/param2/param...

lo he hecho por lo que los métodos "por defecto" puede ser ignorada (por defecto index()), por lo que esto da como resultado direcciones URL como /controller//param1/param2/param.... Por ejemplo, una URL de: /view//panel-glide/3 llamará al index('panel-glide', 3) en el controlador view.

Esto funciona bien y dandy, pero me preocupa que los motores de búsqueda o algunos navegadores más antiguos puedan enloquecer cuando ven las barras dobles, ya que no creo haberlos visto nunca antes.

¿Alguien está al tanto de cualquier problema que pueda surgir al usar esto?

+1

Solo una nota al margen: ¿por qué no aplicar una estructura rígida de controlador/método? Param1 = value1 & param2 = value2 ...? Parece mucho más parecido a RPC para mí. –

+1

@LiorCohen Drupal, por ejemplo, acepta un formato como usted sugiere pero reescribe la url al formato del OP. Es posible que simplemente haya omitido que eso se haga detrás de escena. – Jake

+0

Mi principal preocupación es la flexibilidad en lugar de estrictas medidas estructurales. Y los parámetros de cadena de consulta todavía son accesibles con mi clase de entrada (por ejemplo, '$ this-> input-> get ('param'')' devolvería 'value1').Quiero permitir que segmentos URI sean analizados como parámetros de método (como en CodeIgniter) para facilitar el uso y direcciones URL más agradables (como '/ blog/post/hello-world-foo-bar-baz') – wyqydsyq

Respuesta

11

Hay una respuesta existente en WebMasters que trata el dangers of having two slashes. Discute mucho sobre Apache, pero las ideas deberían ser aplicables en general.

En esencia, no creo que se lo recomiende. /foo/bar y /foo//bar realmente deberían ser dos caminos completamente diferentes. Cada barra inclinada es significativa, y los intentos de burlar esa estandarización están destinados a volver a morderlo.

Como se menciona en la respuesta, también existe un muy real peligro de fallo de las rutas relativas. Algunos navegadores marcarán correctamente que una ruta relativa ../../fizz de es /foo/bar/fizz, mientras que otros tratarán la barra doble como una sola, y optarán por /foo/fizz.

Además, creo que se ve gracioso.

+0

Estoy de acuerdo. Como desarrollador se ve gracioso. Como usuario, se ve gracioso. En realidad, si marqué esa url y el enlace se rompió, esperaría eliminar el extra/para arreglarlo. Y tbh, un cambio en el código podría hacer que eso suceda. – Jake

+0

@nomaD Simplemente reescriba el extra/fuera de allí. – Jake

+1

En mi caso '/ foo/bar' y'/foo // bar' SON dos caminos completamente diferentes. '/ foo/bar' cargará el método/acción' bar() 'del controlador' foo', '/ foo // bar' cargará' index ('bar') 'del controlador' foo'. – wyqydsyq

3

Apache trata varias barras como una sola barra inclinada. Esto afecta cosas como RewriteRules, p. si tiene una regla como la siguiente:

RewriteRule ^user/(.*)/([0-9]+)$ /user.php?id=$2 [QSA,L] 

que cogerá enlaces como user/nomaD/500 pero no va a coger user//500 ya que lo trata como user/500

Así, en otras palabras, no creo que su la instalación funcionará, ya que tratará param1 como method y cambiará todos los parámetros restantes, a menos que sean de un tipo específico. Supongo que esto no afecta su caso específico, pero en muchas situaciones, esto sería una desventaja de usar //.

+1

Pero dijo que funcionó. Supongo que no podría estar en apache y ambos tendrían razón. – Jake

+0

Mi configuración funciona, estoy usando una reescritura catch-all: 'RewriteRule^(. *) $ Index.php? $ 1 [L]', luego usando PHP para analizar la url y averiguar qué cargar – wyqydsyq

+2

Maybe está dividiendo el 'REQUEST_URI' para separar los parámetros y luego – andrewtweber

Cuestiones relacionadas