перезапись URL сильно замедляет прокси - PullRequest
1 голос
/ 02 ноября 2009

У меня есть прокси-скрипт, который пишет очень уродливый длинный URL. прокси-скрипт автоматически переписывает все ссылки href с длинным уродливым URL,

mysite.com/proxy.php?url=somesite.com
mysite.com/proxy.php?url=somesite.com/somedir
mysite.com/proxy.php?url=somesite.com/somedir/somepage.php

чтобы исправить это, я сделал 2 вещи

  1. отредактируйте прокси-скрипт так, чтобы все href ссылки переписываются как

    mysite.com/somesite.com
    
  2. добавлено правило перезаписи в .htaccess, так что short URL теперь переписывают ...

    mysite.com / somesite.com

    RewriteCond% {REQUEST_FILENAME}! -F

    RewriteCond% {REQUEST_FILENAME}! -D

    RewriteRule ^ (. *) $ Proxy.php? Url = $ 1 [L, QSA]

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

1 Ответ

3 голосов
/ 02 ноября 2009

Тест, который вы написали, выполняет два файловых теста (, если 'not-file' и 'not-dir' ), и если они верны, он выполнит ваш RewriteRule. Этот тест выполняется для каждого запроса. Даже если бы результат в противном случае потребовал бы только ответа HTTP 304 (без изменений) или когда реальные файлы в настоящий момент хранятся в памяти Apache.

Возможно, это значительно замедлит работу вашего сайта, если на нем будет много (сервер / клиент кэшировано) изображений или других ресурсов. Чтобы предотвратить это, попробуйте выполнить фильтрацию без необходимости доступа к вашей файловой системе. Отфильтруйте как можно больше, используя регулярное выражение. Самый простой способ сделать это, изменив часть пути URI на что-то уникальное, например example.com/u=somesite.com или даже example.com/p/somesite.com (p для прокси)).

Ваши тесты будут намного быстрее, если все, что вам нужно сделать, это сопоставление с шаблоном регулярного выражения, а не два теста на существование файла (пример для example.com/p/somesite/etc/....):

RewriteCond %{REQUEST_URI} ^/p/
RewriteRule ....

Обновление: немного расширено и добавлен небольшой пример

PS: даже если вы не хотите менять текущую краткую схему URI, вы можете временно использовать этот шаблон, чтобы проверить, меняет ли он производительность в лучшую сторону.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...