Обработка URL - PHP против Apache Rewrite
В настоящее время я позволяю одному скрипту PHP обрабатывать все входящие URL. Этот скрипт PHP затем анализирует URL-адрес и загружает определенный обработчик для этого URL-адреса. Как это:
if(URI === "/")
{
require_once("root.php");
}
else if(URI === "/shop")
{
require_once("shop.php");
}
else if(URI === "/contact")
{
require_once("contact.php");
}
...
else
{
require_once("404.php");
}
Теперь я продолжаю думать, что это на самом деле крайне неэффективно и потребует много ненужной вычислительной мощности, как только мой сайт будет посещаться чаще. Поэтому я подумал, почему бы не сделать это в Apache с mod_rewrite и не позволить Apache напрямую загрузить скрипт PHP:
RewriteRule ^$ root.php [L]
RewriteRule ^shop$ shop.php [L]
...
Однако, поскольку у меня много таких URL-адресов, я хочу внести изменения, только если они действительно того стоят.
Итак, вот мой вопрос: какой вариант лучше (с точки зрения эффективности и других) и почему?
Кстати, я абсолютно хочу сохранить схему URL, а не просто позволить скриптам быть доступными через их фактическое имя файла (Some.php).
4 ответа
Итак, вот мой вопрос: какой вариант лучше (с точки зрения эффективности и других) и почему?
Если каждый ресурс должен проходить проверку на основе PHP, как вы говорите в своем комментарии:
некоторые ресурсы доступны только зарегистрированным пользователям, поэтому я сначала проверяю куки и состояние входа в систему, а затем обслуживаю их с помощью readfile().
тогда вы действительно можете использовать логику на стороне PHP для управления вещами: в любом случае будет запущен экземпляр PHP, что значительно повысит производительность анализа паролей в Apache.
Если у вас есть статические ресурсы, которые не нуждаются в какой-либо сессии или другой проверке на стороне PHP, вам следует по возможности полностью обработать маршрутизацию в файле.htaccess, поскольку вы избегаете запуска отдельного процесса PHP для каждого ресурса. Но в вашем случае это не будет применяться.
Некоторые идеи для повышения производительности:
Подумайте, действительно ли каждый ресурс должен быть защищен с помощью аутентификации на основе PHP. Могут ли таблицы стилей или некоторые изображения не быть общедоступными, сохраняя процесс PHP с высокой производительностью?
попробуйте минимизировать ресурсы до как можно меньшего числа файлов, например, сворачивая все таблицы стилей в один и используя спрайты CSS, чтобы уменьшить количество изображений.
Я слышал, что nginx лучше подготовлен для обработки такого специфического сценария - по крайней мере, мне сказали, что он может очень эффективно обрабатывать доставку файла после проверки подлинности, вместо того, чтобы полагаться на PHP
readfile()
,
RewriteRule ^([a-z]+)$ $1.php [L]
и переименовать root.php
в index.php
,
Подход PHP верен, но он может использовать некоторые улучшения.
$file = $uri.".php";
if (!is_file($file)) { header("Status: 404 Not Found"); require_once(404.php); die(); }
require_once($uri.".php");
Хорошо, что касается эффективности - версия htaccess с регулярным выражением и версия php с одним регулярным выражением и загрузкой соответствующего файла будет быстрее, чем многие правила htaccess или многие php, если - иначе
Кроме того, htaccess и php way должны быть схожими по эффективности в этом случае, вероятно, с небольшим выигрышем с htaccess (устранение одного требования в php)