2009-06-24 12 views
7

Digamos que tengo una reescritura que necesita pasar la URL a una función de PHP y recuperar un valor para decir cuál debe ser el nuevo destino. ¿Hay una manera de hacer eso?Ejecuta código PHP desde .htaccess?

Gracias.

ACTUALIZACIÓN:

Gracias por lo guys..I ahora todavía tengo problemas, pero te voy a mostrar mi código:

.htaccess

#I got the file path by echoing DOCUMENT_ROOT and added the rest. 
RewriteMap fixurl prg:/var/www/vhosts/mydomain.com/httpsdocs/domain_prototype/code_base/url_handler.php 

RewriteEngine On 
RewriteRule (.*) ${fixurl:$1} [PT] 

PHP:

set_time_limit(0); # forever program! 
$keyboard = fopen("php://stdin","r"); 
while (1) { 
     $line = trim(fgets($keyboard)); 
     print "www.google.com\n"; # <-- just test to see if working. 
} 

Sin embargo, estoy obteniendo un 500 Internal Server Error No estoy seguro de si hay un error en mi .htaccess o en mi PHP?

Respuesta

11

Hay algo llamado RewriteMap.

Puede llamar a un script ejecutable que devolverá la URL a reescribir.

Comprobar este artículo para obtener más información y ejemplos (en Perl, pero son totalmente aplicables a cualquier otro idioma):

http://www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html

Resumen de advertencias:

  • debe ejecutar un STDIN lectura bucle (es decir, no salir después de recibir una URL)
  • Debe imprimir la URL para reescribir a CON una nueva línea final
  • debe ser legible y ejecutable por el usuario Apache se ejecuta como

Ésta es la manera de crear el mapa

RewriteMap fixurl prg:/usr/local/scripts/fixit.php 

y ahora podemos usarlo en un RewriteRule:

RewriteEngine On 
RewriteRule (.*) ${fixurl:$1} 

EDITAR: Acerca del error interno del servidor. La causa más probable es lo que Gumbo menciona, RewriteMap no se puede usar en .htaccess, lamentablemente. Puede usarlo en RewriteRule en .htaccess, pero solo puede crearlo en la configuración del servidor o la configuración del host virtual. Para estar seguro, verifique el registro de errores.

Por lo tanto, la única solución PHP/.htaccess solo sería reescribir todo en un determinado programa PHP que hace la comprobación y redirecciones utilizando el encabezado de Ubicación. Algo así como:

RewriteRule (.*) proxy.php?args=$1 [QSA] 

Luego, en proxy.php

<?php 
     $url = get_proper_destination($QUERY_STRING); #args will have the URI path, 
                #and, via QSA you will have 
                #the original query string 
     header("Location: $url"); 
?> 
3

Sí; necesita un RewriteMap, de la variedad del Programa de reescritura externa.

2

Lo que quiero hacer es pasar la dirección URL de la página PHP y luego hacer la redirección final utilizando la opción encabezados PHP.

header("Location: new-page.php"); 

Si no desea que redireccione, también puede hacer una inclusión de la página que desea. Encuentro que esto es un poco más flexible que usar RewriteMap.

Espero que esto ayude!

Cuestiones relacionadas