La confusión entre dos reglas de reescritura de direcciones url

0

Pregunta

estas dos reglas son confusas :

RewriteRule ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ search.php?city=$1&speciality=$2 [L] 
RewriteRule ^health-institute-app-([a-zA-Z\-]+)$ search.php?city=$1 [L]

cuando quiero llegar health-institute-app-mycity (2da regla) el servidor considerar app como un valor y tratar de llegar a search.php?city=app&speciality=mycity (1ª regla)

¿cómo puedo decir que estas son las dos reglas distintas?

.htaccess apache mod-rewrite
2021-11-23 10:56:12
1

Mejor respuesta

2

Sí, porque el regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ en la primera regla también coincide con health-institute-app-mycity.

Usted necesita para revertir estas dos directivas, por lo que la regla más específica es la primera.

Por ejemplo:

RewriteRule ^health-institute-app-([a-zA-Z-]+)$ search.php?city=$1 [L]
RewriteRule ^health-institute-([a-zA-Z-]+)-([a-zA-Z-]+)$ search.php?city=$1&speciality=$2 [L] 

(No hay necesidad de barra diagonal inversa escapar del guión cuando al inicio o al final de la clase de caracteres.)

Sin EMBARGO, el regex en el (ahora) segunda regla es potencialmente ambiguos desde el guión (-) se utiliza para delimitar los dos valores (city y speciality), pero el guión también está incluido en las clases de personaje, por lo que presumiblemente ser parte de los propios valores. Sin embargo, tanto city y speciality no puede contener guiones, a pesar de la regex aparentemente permitir esto.

Por ejemplo, ¿cómo debe una solicitud de health-institute-foo-bar-baz-qux ser resueltos? Desde el cuantificador + es codicioso, esto en la actualidad como resultado search.php?city=foo-bar-baz&speciality=qux. Si alguna vez hay un guión en el speciality (como se sugirió que esto podría ser el caso por el regex) nunca será igualado.

2021-12-09 22:55:14

@narseoh en Realidad, ya que estos valores son delimitados por un guión, incluyendo el guión en las clases de caracteres (es decir. los valores en sí mismos pueden contener un guión) la introducción de una ambigüedad. por ejemplo. Lo que debe health-institute-foo-bar-baz-qux resolver? Puede el city contienen guiones?
MrWhite

Sí, de hecho, algunas ciudades tienen un guión en el nombre de la ciudad y otras ciudades tienen dos palabras, el espacio se sustituye por un guión en la url
narseoh

@narseoh ACEPTAR, por lo que el speciality nunca contiene un guión? (De lo contrario, se convertirá en parte de la city.) En caso de que el guión debe ser eliminado de la speciality la clase de personaje, para eliminar esta ambigüedad/confusión, ya que es superfluo.
MrWhite

gracias @MrWhite , en realidad ni siquiera especialidad podría tener un guión que hace las cosas un poco más complicado para mí. Lo pensé y reemplazado (-) con (/) para separar los datos, que dijo que tenía otros asuntos (voy a crear otro hilo al respecto)
narseoh

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................