Обработка URL - PHP против Apache Rewrite - PullRequest
0 голосов
/ 05 августа 2011

В настоящее время я позволяю одному 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, а не простопусть скрипты будут доступны через их фактическое имя файла (something.php).

Ответы [ 4 ]

0 голосов
/ 05 августа 2011

Итак, вот мой вопрос: какой вариант лучше (с точки зрения эффективности и других) и почему?

Если каждый ресурс должен проходить проверку на основе PHP, как вы говорите в своем комментарии:

некоторые ресурсы доступны только зарегистрированным пользователям, поэтому сначала я проверяю файлы cookie и состояние входа в систему, а затем обслуживаю их с помощью readfile ().

тогда вы действительно можете использовать логику на стороне PHP для управления вещами: в любом случае будет запущен экземпляр PHP, что значительно повысит производительность анализа паролей в Apache.

Если у вас есть статические ресурсы, которые не нуждаются в какой-либо сессии или другой проверке на стороне PHP, вам следует по возможности полностью обработать маршрутизацию в файле .htaccess, поскольку вы избегаете запуска отдельного процесса PHP для каждый ресурс. Но в вашем случае это не будет применяться.

Некоторые идеи по повышению производительности:

  • подумайте, нужно ли действительно каждый ресурс защищать с помощью аутентификации на основе PHP. Могут ли таблицы стилей или некоторые изображения не быть публичными, сохраняя процесс PHP с высокой производительностью?

  • попробуйте минимизировать ресурсы на как можно меньшее количество файлов, например, сворачивая все таблицы стилей в одну и используя CSS-спрайты, чтобы уменьшить количество изображений.

  • Я слышал, что nginx лучше подготовлен для обработки такого специфического сценария - по крайней мере, мне сказали, что он может очень эффективно обработать доставку файла после проверки подлинности сделано, вместо того, чтобы полагаться на PHP readfile().

0 голосов
/ 05 августа 2011

Подход PHP верен, но он может использовать некоторые улучшения.

$file = $uri.".php";
if (!is_file($file)) { header("Status: 404 Not Found"); require_once(404.php); die(); }
require_once($uri.".php");
0 голосов
/ 05 августа 2011

ОК, что касается эффективности - версия htaccess с регулярным выражением и версия php с одним регулярным выражением и загрузкой соответствующего файла будет быстрее, чем многие правила htaccess или много php, если - иначе

Кроме этого, htaccess и phpв этом случае эффективность должна быть схожей, вероятно, с небольшим выигрышем с помощью htaccess (исключая одно требование в php)

0 голосов
/ 05 августа 2011
RewriteRule ^([a-z]+)$ $1.php [L]

и переименуйте root.php в index.php.

...