докувики, нгинкс и фермы

578
Naib

Я пытаюсь настроить несколько докувики, но я действительно изо всех сил ...

Я могу настроить его относительно легко, но я хотел бы использовать концепцию фермы ( https://www.dokuwiki.org/farms ). Недостатком является то, что он написан для apache, а не nginx, и в то же время я не нашел никаких руководств по nginx.

Я не могу использовать vhost, где он должен быть развернут (у меня есть локальный тест vhost, и я могу настроить это), и поэтому требуется эквивалент hginccess nginx.

Проблема, кажется, вокруг "животного" переписать

RewriteRule ^ /? ([^ /] +) / (. *) / Farmer / $ 2? Animal = $ 1 [QSA]

RewriteRule ^ /? ([^ /] +) $ / Farmer /? Animal = $ 1 [QSA]

становится (в соответствующем месте).

переписать ^ /? ([^ /] +) / (. *) / фермер / $ 2? животное = $ 1;

переписать ^ /? ([^ /] +) $ / farmer /? animal = $ 1;

Ни одно из того, что я пытался работой, поэтому я решил уйти обратно и следуйте советам переадресации ( https://www.dokuwiki.org/tips:redirect_farm ), и я не в состоянии производить Функционирующий Шаг 2: Установка по URL привязки тестирование перенаправления

Это мой localhost.conf.

сервер

location /

местоположение / сарай {#alias / var / www / localhost / htdocs / farmer /;

 rewrite ^/?([^/]+)/(.*) /farmer/$2?animal=$1;  rewrite ^/?([^/]+)$ /farmer/?animal=$1; } 

}

http: // localhost / barn перенаправляет на «фермера», а в журналах отладки показано:

* 1 переписанные данные: "/ farmer /", args: "animal = barn", клиент: 127.0.0.1, сервер: localhost, запрос: "GET / barn / HTTP / 1.1", хост: "localhost"

часть animal = barn вызывает беспокойство ... в равной степени http: // localhost / barn / foo завершается с 404, и журналы перезаписи показывают:

переписанные данные: "/ farmer / foo", args: "animal = barn", клиент: 127.0.0.1, сервер: localhost, запрос: "GET / barn / foo HTTP / 1.1", хост: "localhost"

то, что я ожидал, было животное = Фу. Любой совет, как исправить переписать

2

1 ответ на вопрос

0
Naib

Ну, я вроде ответил на это ...

/ var / www / localhost / htdocs / farmer является базой докувики / var / www / localhost / htdocs / barn - это каталог, в котором хранится моя ферма / var / www / localhost / htdocs / barn / корова является первым животным / var / www / localhost / htdocs / сарай / утка является вторым животным

farmer / inc / preload.php настроен согласно советам:

if (!fined ('DOKU_FARMDIR')) define ('DOKU_FARMDIR', '/ var / www / localhost / htdocs / barn');

cow / conf / local.protected.php одинаково настроен

$ conf ['basedir'] = '/ barn / cow /';

duck / conf / local.protected.php одинаково настроен

$ conf ['basedir'] = '/ barn / duck /';

Теперь nginx localhost.conf настроен так:

server { listen 80; server_name localhost; access_log /var/log/nginx/localhost_access_log main; error_log /var/log/nginx/localhost_error_log info; rewrite_log on; root /var/www/localhost/htdocs;  location ~ /(data/|conf/|bin/|inc/|install.php) { deny all; } # post-install lockdown  location / { try_files $uri $uri/ doku.php @farmer; autoindex on; } location /cow { return 301 http://$host/barn/cow/doku.php; }  location /duck { return 301 http://$host/barn/duck/doku.php; }   location ~ /barn { index doku.php; autoindex on; rewrite ^/barn/?([^/]+)/(.*) /farmer/$2?animal=$1; rewrite ^/barn/?([^/]+)$ /farmer/?animal=$1; }  location @farmer { rewrite ^/farmer/_media/(.*) /lib/exe/fetch.php?media=$1; rewrite ^/farmer/_detail/(.*) /lib/exe/detail.php?media=$1; rewrite ^/farmer/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2; rewrite ^/farmer/(.*) /doku.php?id=$1&$args; }  location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1:9000;  }  } 

Я могу перейти к http: // localhost / farmer для базы, http: // localhost / cow (перенаправление на http: //localhost/bar/cow/doku.php, внутренне переписанное как http: // localhost / farmer /? животное = корова ) для 1-го животного и то же для 2-го.

Мне не нравятся аспекты цепной загрузки nginx, но это работает (тм)