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, которые физически также располагаются в корне.
В последующих строчках скрипта перезаписи мы просто переписываем путь из исходного, начиная с какого-нибудь определённого символа.
После этого всё работает стабильно и быстро.
Коммент.(0)