Обработка 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)

Другие вопросы по тегам