Переписанные URL-адреса страниц загружаются намного дольше


(Та же проблема, что и https://stackoverflow.com/questions/3987754/how-to-diagnose-htaccess-speed-issues-via-rewritelog{[7] } но более четко объяснено ниже)

У нас есть сайт, на котором есть такие сценарии:

http://www.oursite.com/abcd/somescript.php

У нас также есть страницы с переписанными URL-адресами, такие как:

http://www.oursite.com/abcd/events/Anything/Anything/abc/abc.html

Все они на 90 % содержат одинаковый контент с точки зрения js, css и файлов изображений.

Но переписанные URL-адреса страниц загружаются очень медленно. Аналогично, перейдя по ЛЮБОЙ ссылке внутри такой страницы, которая ведет на другую такую страницу, также очень медленно!

Очень похоже, что браузер полностью перезагружает страницу и не использует кэшированные изображения, которые должны присутствовать в браузере.

Я включил перезаписывающий журнал (на уровне 2) в httpd.conf Apache, и он показывает следующее, когда я:

  1. Доступ к домашней странице по адресу: www.example.com/abcd /
  2. Щелкнул по ссылке, чтобы просмотреть категории
  3. Щелкнул по категории - Язык

    URL/sid#ИДЕНТИФИКАТОР= www.example.com/sid#2b06c5712d30

    Step 1
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (1) [perdir ar/www/html/abcd/] pass through /var/www/html/abcd/index.php
    Step 2
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (2) [perdir /var/www/html/abcd/] rewrite 'classes-events.html' -> 'browse.php?type=classes-events'
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (2) [perdir /var/www/html/abcd/] trying to replace prefix /var/www/html/abcd/ with /abcd/
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (1) [perdir /var/www/html/abcd/] internal redirect with /abcd/browse.php [INTERNAL REDIRECT]
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56d8528/initial/redir#1] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/browse.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/showUserData.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/showUserData.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/showUserData.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/browse.php
    Step 3
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (2) [perdir /var/www/html/abcd/] rewrite 'classes-events/Language/206.html' -> 'browse.php?type=classes-events&catId=206'
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (2) [perdir /var/www/html/abcd/] trying to replace prefix /var/www/html/abcd/ with /abcd/
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56caf10/initial] (1) [perdir /var/www/html/abcd/] internal redirect with /abcd/browse.php [INTERNAL REDIRECT]
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56d8948/initial/redir#1] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/browse.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56ccf20/initial] (2) [perdir /var/www/html/abcd/] rewrite 'classes-events/Language/ajax/showUserData.php' -> 'ajax/showUserData.php'
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56ccf20/initial] (2) [perdir /var/www/html/abcd/] trying to replace prefix /var/www/html/abcd/ with /abcd/
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56ccf20/initial] (1) [perdir /var/www/html/abcd/] internal redirect with /abcd/ajax/showUserData.php [INTERNAL REDIRECT]
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56d59d8/initial/redir#1] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/showUserData.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56ccf20/initial] (2) [perdir /var/www/html/abcd/] rewrite 'classes-events/Language/ajax/showUserData.php' -> 'ajax/showUserData.php'
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56ccf20/initial] (2) [perdir /var/www/html/abcd/] trying to replace prefix /var/www/html/abcd/ with /abcd/
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56ccf20/initial] (1) [perdir /var/www/html/abcd/] internal redirect with /abcd/ajax/showUserData.php [INTERNAL REDIRECT]
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56da9f8/initial/redir#1] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/showUserData.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56cef30/initial] (2) [perdir /var/www/html/abcd/] rewrite 'classes-events/Language/ajax/showUserData.php' -> 'ajax/showUserData.php'
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56cef30/initial] (2) [perdir /var/www/html/abcd/] trying to replace prefix /var/www/html/abcd/ with /abcd/
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56cef30/initial] (1) [perdir /var/www/html/abcd/] internal redirect with /abcd/ajax/showUserData.php [INTERNAL REDIRECT]
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56f4268/initial/redir#1] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/showUserData.php
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56cef30/initial] (2) [perdir /var/www/html/abcd/] rewrite 'classes-events/Language/ajax/browse.php' -> 'ajax/browse.php'
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56cef30/initial] (2) [perdir /var/www/html/abcd/] trying to replace prefix /var/www/html/abcd/ with /abcd/
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d56cef30/initial] (1) [perdir /var/www/html/abcd/] internal redirect with /abcd/ajax/browse.php [INTERNAL REDIRECT]
    IPADDRESS - - [DATETIME] [URL/sid#ID][rid#2b06d57127d8/initial/redir#1] (1) [perdir /var/www/html/abcd/] pass through /var/www/html/abcd/ajax/browse.php
    

Редактировать 1 - это.htaccess, который мы используем

RewriteEngine On
RewriteBase /abcd/

RewriteRule ^.*/codelibrary/(.*)$ codelibrary/$1 [L]
#RewriteCond %{THE_REQUEST} in_upload/images/(.*) [NC,OR]
RewriteRule ^.*/in_upload/images/(.*)$ in_upload/images/$1 [L]
RewriteCond %{REQUEST_URI} !in_upload/(.*)\.
RewriteRule ^.*/images/(.*)$ images/$1 [L]
RewriteRule ^.*/admin/ajax/(.*)$ admin/ajax/$1 [L]
RewriteCond %{REQUEST_URI} !admin/(.*)\.
RewriteRule ^.*/ajax/(.*)$ ajax/$1 [L]

RewriteRule ^.*/banner_images/(.*)$ banner_images/$1 [L]

#php_flag magic_quotes_gpc off
RewriteRule (.*)invite/([a-zA-Z0-9]+)$ referer.php?in_name=$2
RewriteRule (.*)cms/([a-zA-Z\-]*).html$ static-pages.php?page_url=$2 [L]
RewriteRule ^([a-zA-Z0-9]+)$ t-profile-public.php?name=$1

RewriteRule (.*)cms/([a-zA-Z\-]*).html$ static-pages.php?page_url=$2 [L]

RewriteRule (.*)classes-events.html$ browse.php?type=classes-events [L]
RewriteRule (.*)ins.html$ browse.php?type=ins [L]
RewriteRule (.*)orgs.html$ browse.php?type=orgs [L]
RewriteRule (.*)random-content.html$ browse.php?type=content&random_order=1 [L]
RewriteRule (.*)content.html$ browse.php?type=content [L]

RewriteRule ^([a-zA-Z\-]*)/([a-zA-Z0-9\s]*)/([0-9]*)\.html$ browse.php?type=$1&catId=$3 [L]
RewriteRule ^([a-zA-Z\-]*)/([a-zA-Z0-9\s]*)/([a-zA-Z0-9\s]*)/([0-9]*)/([0-9]*)\.html$ browse.php?type=$1&catId=$4&subCatId=$5 [L]
#RewriteRule (.*)search/all/([a-zA-Z0-9\s]*)$ searchall.php?type=all&srcval=$2 [L]
#RewriteRule (.*)search/([a-zA-Z\s\-]*)/([a-zA-Z0-9\s]*)$ search.php?type=$2&srcval=$3 [L]
#RewriteRule (.*)search/([a-zA-Z\s\-]*)/all/([a-zA-Z0-9\s]*)$ search.php?type=$2&srcval=$3&seeall=all [L]
#RewriteRule (.*)featured/([a-zA-Z\s\-]*)$ featured-listing.php?type=$2&feature=1 [L]
#RewriteRule (.*)featured/([a-zA-Z\-]*)/([a-zA-Z0-9\s]*)/([0-9]*)\.html$ featured-listing.php?type=$2&catId=$4&feature=1 [L]

RewriteRule (.*)search/all/(.*)$ searchall.php?type=all&srcval=$2 [L]
RewriteRule (.*)search/([a-zA-Z\s\-]*)/all/(.*)$ search.php?type=$2&srcval=$3&seeall=all [L]
RewriteCond %{REQUEST_URI} !all/(.*)\.
RewriteRule (.*)search/([a-zA-Z\s\-]*)/(.*)$ search.php?type=$2&srcval=$3 [L]
RewriteRule (.*)featured/(.*)$ featured-listing.php?type=$2&feature=1 [L]
RewriteRule (.*)featured/([a-zA-Z\-]*)/(.*)/([0-9]*)\.html$ featured-listing.php?type=$2&catId=$4&feature=1 [L]
ErrorDocument 404 http://www.oursite.com/abcd/404.php
Author: Community, 2010-10-22

2 answers

Ух ты, какой здоровенный .htaccess! Одна вещь, о которой вы, возможно, не знаете, заключается в том, что флаг [L] не полностью останавливает обработку правил htaccess. Вместо этого он останавливается на этом и делает новый запрос на переписанный URL-адрес, который снова начинает соответствовать правилам с самого начала. Смотрите здесь для получения более подробной информации.

Некоторые из ваших других правил выглядят немного многословными. По умолчанию правила совпадают в любом месте URL-адреса, если вы не укажете ^ в начале или $ в конце. Поэтому по этому правилу:

RewriteRule (.*)orgs.html$ browse.php?type=orgs [L]

(.*) не требуется и может быть удален - Apache все равно будет искать любой URL, заканчивающийся на orgs.html.

Также проверьте, насколько необходимы эти правила - вам действительно нужно сопоставлять любой URL, заканчивающийся на orgs.html, или это только когда-либо example.com/orgs.html ?

Наконец, модификатор звездочки ищет "ноль или более символов" - так что cms/([a-zA-Z\-]*).html$ будет соответствовать cms/.html. Многие из них следует заменить знаком плюс, чтобы соответствовать хотя бы одному символу - например, cms/([a-zA-Z\-]+).html$

 2
Author: DisgruntledGoat, 2010-10-27 10:11:36

Сколько у вас правил перезаписи? Если у вас много правил, используете ли вы модификатор [L], чтобы убедиться, что механизм перезаписи не проверяет правила без необходимости?

 1
Author: Eric Petroelje, 2010-10-22 19:03:33