2009-06-24 3 views
7

Dire que j'ai une réécriture qui doit passer l'URL à une fonction PHP et récupérer une valeur afin de dire quelle devrait être la nouvelle destination? Y-a-t-il un moyen de faire ça?Exécutez le code PHP à partir de .htaccess?

Merci.

MISE À JOUR:

Merci donc guys..I loin ai toujours des problèmes, mais je vais vous montrer mon code:

.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. 
} 

Cependant, je reçois un Erreur interne du serveur 500 Je ne suis pas sûr s'il y a une erreur dans mon .htaccess ou dans mon PHP?

Répondre

11

Il existe quelque chose appelé RewriteMap.

Vous pouvez appeler un script exécutable qui retournera l'URL à réécrire.

Vérifiez cet article pour plus d'informations et des exemples (en Perl, mais sont tout à fait applicable à toute autre langue):

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

Résumé des mises en garde:

  • Doit exécuter une lecture STDIN loop (c.-à-d. ne pas quitter après avoir reçu une URL)
  • Doit imprimer l'URL à réécrire avec un retour chariot
  • doit être lisible et exécutable par l'utilisateur Apache fonctionne comme

Ceci est la façon de créer la carte

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

Et maintenant, nous pouvons l'utiliser dans un RewriteRule:

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

EDIT: À propos de l'erreur interne du serveur. La cause la plus probable est ce que Gumbo mentionne, RewriteMap ne peut malheureusement pas être utilisé dans .htaccess. Vous pouvez l'utiliser dans une RewriteRule dans .htaccess, mais ne pouvez le créer que dans la configuration du serveur ou la configuration de l'hôte virtuel. Pour être certain, vérifiez le journal des erreurs. Donc, la seule solution PHP/.htaccess seulement serait de réécrire tout dans un certain programme PHP qui fait la vérification et redirige en utilisant l'en-tête Location. Quelque chose comme:

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

Puis, 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

Oui; vous avez besoin d'un RewriteMap, de la variété du programme de réécriture externe.

2

Ce que je voudrais faire est de passer l'URL de la page PHP, puis faire la redirection finale en utilisant l'option d'en-têtes PHP.

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

Si vous ne souhaitiez pas qu'il soit redirigé, vous pouvez également inclure la page souhaitée. Je trouve que c'est un peu plus flexible que d'utiliser RewriteMap.

Espérons que cela aide!

Questions connexes