Option plus rapide: Rediriger via PHP vers PHP ou Apache mod rewrite rediriger vers PHP?

1

Je veux déterminer si l'utilisation du mod .waccess d'Apache est un moyen plus rapide de rediriger vers un fichier PHP, par rapport à la redirection d'un fichier PHP à un autre, à l'aide de la fonction de base de redirection d'en-tête de PHP.

J'ai regardé autour de moi et j'étais incapable de trouver quoi que ce soit à ce sujet. Toute aide serait appréciée.

r.crandall
la source

Réponses:

4

Remarque: je suppose que par "redirection", vous entendez une règle de réécriture qui n'utilise pas l'indicateur [R], mais "redirige" une requête vers un autre fichier PHP - par exemple, sans indicateur du tout ou avec un [L] drapeau.

Si cette hypothèse est fausse, alors jetez un œil à mon argument "Note sur les performances", qui est toujours valable.

La règle .htaccess sera définitivement plus rapide!

Voici pourquoi:

  1. Utilisation de la règle .htaccess : lorsqu'une requête parvient à Apache, il vérifie le fichier .htaccess pour voir si quelque chose doit être fait avec cette requête. remarquant une règle de réécriture, il réacheminera la demande vers PHP et le visiteur du site obtiendra immédiatement le résultat final
  2. en utilisant PHPheader : la requête arrive, est traitée par Apache, puis donnée à PHP, puis PHP envoie au navigateur de votre visiteur un en-tête de redirection de page, le navigateur envoie une autre requête, Apache la traite, la donne à PHP, et seulement après tout ce que votre le visiteur obtient enfin ce qu'il voulait!

Remarque sur les performances : dans tous les scénarios (même sur un réseau local gigabit), l'option n ° 1 ci-dessus sera plus rapide. Les expressions régulières peuvent être lentes, mais Apache est un programme C déjà en mémoire et PHP est un langage interprété, qui doit lire et charger le fichier de script avant de le traiter. Par conséquent, je m'attendrais à de meilleures performances de la règle de réécriture d'Apache. Le facteur majeur, cependant, est une requête-réponse HTTP supplémentaire pour la méthode n ° 2.

Si vous insistez pour le faire avec PHP, alors considérez ceci:

  1. mettre en cache toutes les sorties générées dans votre application PHP
  2. si vous détectez une condition de redirection, détruisez la sortie en cache, puis
  3. incluez le fichier PHP requis pour qu'il génère une nouvelle sortie - ou appelez une fonction qui produira la sortie souhaitée au cas où vous auriez besoin de quelque chose de différent

Cette approche sera également plus rapide qu’un système header.

chronos
la source
Chronos très intéressant! +1 sur mon hébergement partagé, aucun hôte virtuel n'est autorisé. avant d'utiliser Apache Redirect, ce que je vais faire, je veux d'abord essayer de vous conseiller sur la méthode php: j'ai maintenant ceci dans mon index.php switch($_SERVER["HTTP_HOST"]){ case "website.com": header('HTTP/1.1 301 Moved Permanently'); header('Location: /english/home'); case ... etc ?>Comment mettre en cache toute la sortie, puis détruire la sortie en cache? quel code fait ça? Merci!
Sam
1

Mon instinct me dit que htaccess serait avoir à être plus rapide, mais il n'y a pas de substitut à l' analyse comparative en fait dans votre environnement.

femme
la source
1

Une chose à garder à l'esprit est que l'utilisation de fichiers .htaccess ralentit tout (même si le paramètre est activé). Insérez votre réécriture dans l'un de vos fichiers .conf pour Apache (httpd.conf ou virtual-hosts.conf), puis la configuration AllowOverride nonesera encore plus rapide.

En ce qui concerne php vs mod_rewrite, c'est difficile à dire. Ils sont tous les deux si vite que je doute que cela compte.

Brendan Long
la source
1

En ce qui concerne la performance, vous devez considérer deux aspects. Premièrement, il y a les performances de traitement sur le serveur et, deuxièmement, les performances auxquelles les utilisateurs finaux font face.

Si vous utilisez une sorte de redirection, que ce soit par PHP ou la règle de redirection d’Apache (qui peut se trouver dans le fichier de configuration .htaccess ou Apache, le client final doit d’abord attendre la première réponse (redirection), puis envoyer une autre requête à cette URL avant de recevoir enfin la réponse voulue.

Si les performances de l'utilisateur final sont importantes pour vous (par exemple, si votre public cible est en Chine ou quelque chose du genre), vous ne devez pas utiliser la redirection (ni PHP ni Apache), mais plutôt réécrire la demande initiale afin que l'utilisateur reçoive une réponse correcte le la première demande.

Jani Jalkala
la source