/ / mod_rewrite: ¿Se puede hacer referencia a una referencia inversa dos veces? - regex, apache, mod-rewrite

mod_rewrite: ¿Se puede hacer referencia a una referencia de vuelta dos veces? - regex, apache, mod-rewrite

Tengo una regla de reescritura (en un archivo htaccess de Apache) que está intentando usar una referencia inversa dos veces desde una sola captura ($ 1):

RewriteRule ^([A-Za-z0-9_-]+)/?$ $1.php?nav=$1

Parece que la cadena de consulta se está quedando vacía, como

example.com/new

está siendo reescrito como

example.com/new.php?nav=

lo que quiero es

example.com/new.php?nav=new

Mi pregunta: ¿puedo hacer referencia a $ 1 dos veces en la expresión?

ACTUALIZAR:

El apache documentación en mod_rewrite indica que puede hacer referencia acaptura tantas veces como quieras en la parte de sustitución de una regla de reescritura. Sin embargo, después de intentarlo durante un par de días no pude hacerlo funcionar. Obtuve mi regla para aprobar los probadores de expresiones regulares en línea que existen, pero no en mi sitio. Al final, rediseñé mi sistema de menús para que pudiera usar reglas de reescritura más simples.

Respuestas

1 para la respuesta № 1

Esta expresión regular que está utilizando es incorrecta:

^(A-Za-z0-9-_)$

El rango está permitido solo entre corchetes y su necesidad de usar + accesorio para que coincida con más de 1 carácter.

Reemplace su RewriteRule con esto:

RewriteRule ^([a-z0-9_-]+)/?$ $1.php?nav=$1 [L,NC,QSA]

0 para la respuesta № 2

Pruebe esto en su lugar:

RewriteRule ^([w]*)/?$   $1.php?nav=$1 [L]

Y si. Las referencias posteriores se pueden utilizar más de una vez.

ACTUALIZAR

Según tu comentario:

RewriteEngine On
RewriteBase /information/
RewriteRule ^article([0-9]+)/?$ get-article.php?article=$1 [L]
RewriteRule ^blog([0-9]+)/?$ get-blog.php?nav=blog&entry=$1 [L]

RewriteCond %{REQUEST_URI} /new
RewriteRule ^([w]*)/?$   $1.php?nav=$1 [L]

La última condición y la última regla funcionan bien. El resultado es:

http://example.com/new.php?nav=new