papilio

Записи с меткой «lua»

mod_magnet для WordPress MU

В предыдущем посте я писал про mod_magnet в lighttpd для обычного WordPress. Сегодня, в связи с переходом на ветку 1.5 lighttpd, решил также перевести MU-версию на mod_magnet.

В процессе возникло несколько сложностей, связанных с тем, как MU использует т.н. чистые ссылки. Например, это директории files, расположение wp-content и т.п. Тем не менее, с помощью lua удалось запрограммировать нужные правила перенаправлений.

Итак, сначала надо указать файл lua-скрипта в настройках Lighttpd:

$HTTP["host"] == "blog.piclab.ru" {
  server.document-root = "/home/www/piclab.ru/blog"
  magnet.attract-physical-path-to = ( server.document-root + "/rewrite.lua" )
}

Затем создать файл скрипта rewrite.lua в корне (всё зависит от вышеуказанных настроек) вашего сайта следующего содержания:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
attr = lighty.stat(lighty.env["physical.path"])
 
if (not attr) then
  i, j = string.find(lighty.env['uri.path'], "/download/")
  k, m = string.find(lighty.env['uri.path'], "/files/")
  t, f = string.find(lighty.env['uri.path'], "/wp-")
  e, s = string.find(lighty.env['uri.path'], ".php")
  if (i  == 1 and j == 10 and string.len(lighty.env['uri.path']) > 10) then
    id = string.sub(lighty.env['uri.path'], j + 1)
    lighty.env["uri.path"] = "/wp-content/plugins/download-monitor/download.php"
    lighty.env["physical.rel-path"] = lighty.env["uri.path"]
    lighty.env['uri.query'] = "id=" .. id
  elseif (k) then
    file = string.sub(lighty.env['uri.path'], m + 1)
    lighty.env["uri.path"] = "/wp-content/blogs.php"
    lighty.env["physical.rel-path"] = lighty.env["uri.path"]
    lighty.env['uri.query'] = "file=/" .. file
  elseif (t) then
    path = string.sub(lighty.env['uri.path'], t)
    lighty.env["uri.path"] = path
    lighty.env["physical.rel-path"] = lighty.env["uri.path"]
  elseif (e) then
    g, v = string.find(lighty.env['uri.path'], "/", 2)
    path = string.sub(lighty.env['uri.path'], g)
    lighty.env["uri.path"] = path
    lighty.env["physical.rel-path"] = lighty.env["uri.path"]
  else
    lighty.env["uri.path"] = "/index.php"
    lighty.env["physical.rel-path"] = lighty.env["uri.path"]
  end
  lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
end

Как и в прошлый раз первая строчка определяет, существует ли файл на самом деле по данной ссылке (например, для статики), если же нет, то тут уже надо переписывать адреса.

С четвёртой по седьмую строки мы ищем вхождение необходимых нам элементов:

  • download для плагина WP Download Monitor;
  • files — внутренняя структура отдачи статических файлов (закачанных изображений, например) в WordPress MU;
  • wp- для директорий вроде wp-content и wp-includes. Связанно с тем, что у каждого блога в WordPress MU есть эти директории, хотя физически они расположены в корне;
  • .php для отработки таких файлов как xmlrpc.php, которые физически также располагаются в корне.

В последующих строчках скрипта перезаписи мы просто переписываем путь из исходного, начиная с какого-нибудь определённого символа.

После этого всё работает стабильно и быстро.

Метки: , , , ,

Использование mod_magnet для блогов на WordPress

Если у вас в качестве сервера выбран быстрый и лёгкий lighttpd, а для ведения блогов пользуетесь WordPress, то наверняка сталкивались с проблемой т.н. чистых адресов (ЧПУ, permalink). Для сервера на Apache всё решается просто с помощью mod_rewrite и файлов .htaccess. У lighttpd тоже есть mod_rewrite: решение для WordPress я уже описывал.

Но сейчас мне хочется рассказать о более гибкой технологии с использованием mod_magnet. Итак, нам необходимо, чтобы работали нормальные ссылки, а при этом и обычные файлы скачивались. Далее »

Метки: , , , , , , , , , ,