2011-05-31 7 views
5

Me gustaría obtener ayuda que coincida con las siguientes direcciones URL.URL de coincidencia regex sin extensión de archivo

/settings => /settings.php 
/657_46hallo => /657_46hallo.php 
/users/create => /users.php/create 
/contact/create/user => /contact.php/create/user 
/view/info.php => /view.php/info.php 
/view/readme - now.txt => /view.php/readme - now.txt 
/=> [NO MATCH] 
/filename.php => /unknown.php 
/filename.php/users/create => /unknown.php 

si la primera parte después de que el nombre de dominio es un nombre de archivo que termina con ".php" (ver ejemplos últimos 2) Se debe redirigir a /unknown.php

Creo que necesito 2 expresiones regulares Primero debería ser algo así como: ^/([a-zA-Z0-9 _] +) (/)? (* *)? $ Segundo para capturar el nombre de archivo directo "/filename.php" o "/ filename. php/create/user " así que puedo redirigir a unknown.php

La primera expresión regular que obtuve casi funciona para el primer pa rt. =========================

request url: http://domain.com/user/create 
regex: ^/([a-zA-Z0-9_]+)(/)?(.*)?$ 
replace http://domain.com/$1.php$2$3 
makes: http://domain.com/user.php/create 

El problema es que también coincide con http://domain.com/user.php/create

Si alguien me podría ayudar con las dos expresiones regulares que sería grande.

Respuesta

1

Si desea hacer coincidir esos .php casos puede probar esto:

^\/([a-zA-Z0-9_]+)(\/)?(.*)?$ 

ver aquí en Regexr

Si se quiere evitar esos casos intente esto:

^/([a-zA-Z0-9_]+)(?!\.php)(?:(/)(.*)|)$ 

Ver aquí en Regexr

El (?!\.php) es una mirada negativa hacia adelante que asegura que no hay .php en este lugar.

+0

Eso parece hacer el truco. (El primer ejemplo publicado es diferente del enlace regexr, pero el del sitio regexr está funcionando: ^/([a-zA-Z0-9 _] + \. Php) (/)? (* *)? $) –

1

Cuando todo lo que tienes es un martillo ...

Si bien esto probablemente podría ser resuelto con una expresión regular, que es probablemente la herramienta equivocada para el trabajo, a menos que tenga limitaciones que exigen el uso de expresiones regulares .

Divida la cadena usando '/' como delimitador, vea si el primer componente termina con '.php'; si es así, rechace, de lo contrario agregue '.php' al primer componente y vuelva a unir los componentes usando '/'.

+1

Esto se va a utilizar como una regla de reescritura en el servidor web cherokee. El servidor web de Cherokee no me permite dividir la URL. Un lenguaje de programación lo haría mucho más fácil, pero desafortunadamente no es una opción. –

Cuestiones relacionadas