Будет RewriteRules В.htaccess влияет на скорость работы сайта?
Я планирую добавить не более 10 .htaccess переписывает url-коды в домашнем каталоге повлияет ли это на выполнение (время загрузки сайта) моего сайта ?
Мой ток .файл htaccess-это
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([0-9]+)/([0-9]+)/([^.]+).html index.php?perma=$3
RewriteRule ^movies/([^.]+).html gallery.php?movie=$1
RewriteRule ^album/([^.]+).html gallery.php?album=$1
RewriteRule ^img/([^.]+)/([^.]+).html gallery.php?img=$2
RewriteRule ^movies.html gallery.php
4 ответов:
Да, это повлияет на время загрузки. Чем больше правил / исключений у вас есть, тем больше времени требуется для визуализации. Но: мы говорим о микро / миллисекундах, которые даже не заметит человеческий глаз.
Вам, возможно, потребуется увидеть влияние на производительность порядка правил перезаписи при использовании apache mod_rewrite и, как прокомментировал @diolemo, для 20 правил перезаписи это не заметно.
Большую часть времени, необходимого для загрузки веб-страницы, занимает извлечение HTML, CSS, JavaScript и изображений. Время на переписывание URL-адреса ничтожно мало.
Обычно изображения являются самой большой причиной медленной загрузки. Такой инструмент, как Pingdom, может помочь вам определить время загрузки различных компонентов в перспективе.
HTH.
10 правил-это не проблема, но на будущее: обычный подход состоит в том, чтобы перенаправить все к одной точке входа и позволить приложению выполнять маршрутизацию. Простой пример:
.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php [L,QSA]Индекс.php
$query = $_SERVER['REQUEST_URI']; $queryParts = explode('/', $query); switch($queryParts[0]) { case 'movies': // ... break; case 'album': // ... break; case 'img': // ... break; // ... default: // 404 not found }Условия
RewriteCondгарантируют, что запросы к существующим файлам не будут перезаписаны. QSA необязателен, он означает "строка запроса добавлена", так что, например,movies.html?sort=titleпереписывается вindex.php?sort=title. Исходный запрос URI является доступно в$_SERVER['REQUEST_URI'].Если ваше приложение объектно-ориентировано, шаблон Front Controller будет интересен вам. Все основные фреймворки PHP используют его в некотором роде, это может помочь взглянуть на их реализации.
Если нет, микро-фреймворк, такой как Silex, может сделать эту работу за вас. В Silex ваш маршрут может выглядеть следующим образом:
Индекс.php
require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); $app->get('/{year}/{month}/{slug}', function ($year, $month, $slug) use ($app) { return include 'article.php'; }); $app->get('/movies/{movie}.html', function ($movie) use ($app) { return include 'gallery.php'; }); $app->get('/album/{album}.html', function ($album) use ($app) { return include 'gallery.php'; }); $app->get('/img/{parent}/{img}.html', function ($parent, $img) use ($app) { return include 'gallery.php'; }); $app->get('/movies.html', function () use ($app) { return include 'gallery.php'; }); $app->run();
gallery.phpиarticle.phpдолжен был бы вернуть их выход. Вы, наверное, можно повторно использовать существующие скрипты с этим индексом.php если вы замените$_GET['var']на$varи добавите буферизацию вывода:Галерея.php
ob_start(); // ... return ob_get_clean();
Comments