Pregunta

Ahora mismo estoy haciendo algo como esto:

RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php

Preferiría tener una regla que hiciera lo mismo para cada URL, para no tener que seguir agregándolas cada vez que agrego un archivo nuevo.

Además, me gusta hacer coincidir cosas como '/config/new' con 'config_new.php' si es posible.¿Supongo que alguna expresión regular me permitiría lograr esto?

¿Fue útil?

Solución

Intentar:

Reescribir regla ^/?(\w+)/?$ $1.php

$1 es el contenido de la primera cadena capturada entre paréntesis.Los corchetes alrededor de la segunda barra no son necesarios.

editar:Para el otro partido, prueba esto:

Reescribir regla ^/?(\w+)/(\w+)/?$ $1_$2.php

Otros consejos

Yo haría algo como esto:

RewriteRule ^/?(logout|config|foo)/?$ $1.php
RewriteRule ^/?(logout|config|foo)/(new|edit|delete)$ $1_$2.php

Prefiero enumerar explícitamente las URL que quiero hacer coincidir, para no tener que preocuparme por el contenido estático o por agregar cosas nuevas más adelante que no necesitan reescribirse en archivos php.

Lo anterior está bien si todas las URL secundarias son válidas para todas las URL raíz (book/new, movie/new, user/new), pero no tan bueno si desea tener diferentes sub-URL dependiendo de la acción raíz (logout/new no tiene mucho sentido).Puede manejar eso con una expresión regular más compleja o enrutando todo a un único archivo php que determinará qué archivos incluir y mostrar según la URL.

La reescritura de mod no puede realizar (potencialmente) reemplazos ilimitados como desea hacer en la segunda parte de su pregunta.Pero consulte el motor de reescritura externo en la parte inferior de la Guía de reescritura de URL de Apache:

Motor de reescritura externo

Descripción:

Preguntas frecuentes:¿Cómo podemos resolver el problema FOO/BAR/QUUX/etc.¿problema?Parece que no hay solución mediante el uso de mod_rewrite...Solución:

Utilice un RewriteMap externo, es decir.un programa que actúa como un RewriteMap.Se ejecuta una vez al inicio de Apache, recibe las URL solicitadas en STDIN y tiene que colocar la URL resultante (generalmente reescrita) en STDOUT (¡mismo orden!).

RewriteEngine on
RewriteMap    quux-map       prg:/path/to/map.quux.pl
RewriteRule   ^/~quux/(.*)$  /~quux/${quux-map:$1}

#!/path/to/perl

#   disable buffered I/O which would lead
#   to deadloops for the Apache server
$| = 1;

#   read URLs one per line from stdin and
#   generate substitution URL on stdout
while (<>) {
    s|^foo/|bar/|;
    print $_;
}

Este es un ejemplo solo de demostración y simplemente reescribe todas las URL /~quux/foo/...a /~quux/bar/....En realidad puedes programar lo que quieras.Pero tenga en cuenta que, aunque un usuario medio también puede utilizar dichos mapas, sólo el administrador del sistema puede definirlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top