.htaccess reescribir no get la URL correcta

Estoy migrando un website de un server antiguo que está siendo apagado a uno nuevo, y en el process estoy teniendo algunos problemas con Apache y mod_rewrite. Tengo el siguiente file .htaccess:

RewriteEngine on RewriteRule ^audio/(.*?)/.*?$ audio.php?id=$1 RewriteRule ^books/(.*?)/.*?$ books.php?id=$1 

El audio.php y books.php se están llamando como se esperaba, excepto que las variables capturadas no se están pasando, por lo que en el caso de la rewriterule audio.php me están sirviendo la página audio.php pero $_GET está vacío.

Para probar lo que está sucediendo, agregué RewriteRule (.*) test.php?a=$1 donde test.php acaba de download $_GET cuando hice ese $_GET['a'] contenía 'test.php'.

Nada está apareciendo en el logging de errores, y como los files correctos se están sirviendo claramente la reescritura es en su mayoría de trabajo, y la configuration tiene AllowOverride All lo que estoy haciendo mal?

Quiero ser claro que este file htaccess trabajó como está en el server antiguo.

2 Solutions collect form web for “.htaccess reescribir no get la URL correcta”

Debe configurar un RewriteLog con un alto RewriteLogLevel para asegurar que sus reglas se procesan como usted espera.

Tenga en count que .*? puede producir una coincidencia vacía, porque * significa 0 o más . Podría por lo less querer usar + (así .+? ), Lo que significa uno o más .

Anyhoo. Hay mejores maneras de express lo que estás buscando.

Para hacer coincidir hasta la siguiente barra, esto debería hacer:

 RewriteRule ^audio/([^/]+) /audio.php?id=$1 

Aunque, si es un identificador numérico, puede ser más preciso:

 RewriteRule ^audio/(\d+) /audio.php?id=$1 

Esto realmente va a depender de exactamente lo que está después de hacer. ¿Qué path se pasa a la request original? ¿Es siempre / audio / algún_id / otro_stuff? ¿Qué otra configuration hay para los paths con "audio"? Para una request del formulario:

 http://www.example.com/audio/some_id/other_stuff 

es probable que desee una RewriteRule de:

 ReWriteRule ^/audio/(.*)/.*$ /audio.php?id=$1 

Pienso que el .*? no están haciendo lo que quieren. Dar un giro, y ver lo que hace. También puede encontrar la guía de reference de expresión regular de Perl útil.

  • Apache reescribir regla y mantener la url sin cambios?
  • Apache mod_jk reemplazando mod_rewrite rules
  • Apache restringe el dominio
  • nginx si la directiva ha dejado de funcionar después de actualizar de 0.7 a 1.0.2
  • mod_rewrite: Utiliza backreference desde RewriteCond como CondPattern en otra RewriteRule
  • ¿Puedo networkingireccionar solo mi página principal a www
  • Redireccionamiento de una URL específica a un vhost diferente en apache
  • reescritura de htaccess y conflicto de authentication
  • htaccess para subdominios comodín
  • La regla RewriteBase funciona en .htacess, pero no en httpd.conf (dentro de <Directorio ...>)?
  • ¿Pueden reescribirse los files de hosts en Apache conf?
  • Apache2 - Varios VirtualHosts para el mismo dominio
  • Centos 6.8, Apache 2.2, estable durante años repentinamente mod_rewrite parece estar fallando
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.