我正在尝试设置多个 dokuwiki,但是我真的很挣扎......
我可以相对轻松地建立一个,但我想利用农场概念(https://www.dokuwiki.org/farms)。缺点是它是为 apache 而不是 nginx 编写的,而且我也没有找到任何 nginx 指南。
我无法在部署该程序的地方使用 vhost(我已经在本地测试了 vhost 并且可以对其进行配置),因此需要与 htaccess 等效的 nginx。
问题似乎出在“动物”重写上
重写规则 ^/?([^/]+)/(.*) /farmer/$2?animal=$1 [QSA]
重写规则 ^/?([^/]+)$ /farmer/?animal=$1 [QSA]
成为(在相关位置内)。
重写 ^/?([^/]+)/(.*) /farmer/$2?animal=$1;
重写 ^/?([^/]+)$ /farmer/?animal=$1;
我尝试过的方法都不起作用,所以我决定退后一步,按照重定向提示操作(https://www.dokuwiki.org/tips:redirect_farm)我无法制作一个功能齐全的步骤 2:设置 URL 绑定重定向测试
这是我的 localhost.conf。
服务器{监听80;服务器名称localhost;访问日志
/var/log/nginx/localhost_access_log 主要;错误日志
/var/log/nginx/localhost_error_log 信息;rewrite_log 开启;root
/var/www/localhost/htdocs;#位置〜
/(data/|conf/|bin/|inc/|install.php) { 全部拒绝; }
位置 / { 自动索引开启;}
位置/谷仓 { #alias /var/www/localhost/htdocs/farmer/;
rewrite ^/?([^/]+)/(.*) /farmer/$2?animal=$1; rewrite ^/?([^/]+)$ /farmer/?animal=$1; }
}
http://localhost/谷仓确实重定向到“farmer”并且调试日志显示:
*1 重写数据:“/farmer/”,参数:“animal=barn”,客户端:127.0.0.1,服务器:localhost,请求:“GET /barn/ HTTP/1.1”,主机:“localhost”
动物=谷仓部分令人担心……同样http://localhost/谷仓/foo失败并出现 404 并且重写日志显示:
重写数据:“/farmer/foo”,参数:“animal=barn”,客户端:127.0.0.1,服务器:localhost,请求:“GET /barn/foo HTTP/1.1”,主机:“localhost”
我原本期望的是 animal=foo。关于如何更正重写,有什么建议吗?
答案1
嗯,我已经回答过了……
/var/www/localhost/htdocs/farmer是基础 dokuwiki /var/www/localhost/htdocs/谷仓是一个保存我的农场的目录 /var/www/localhost/htdocs/谷仓/牛是第一只动物 /var/www/localhost/htdocs/谷仓/鸭是第二只动物
farmer/inc/preload.php 按照提示配置:
如果(!defined('DOKU_FARMDIR'))define('DOKU_FARMDIR','/ var / www / localhost / htdocs / barn');
cow/conf/local.protected.php 同样配置
$conf['basedir'] = '/谷仓/牛/';
duck/conf/local.protected.php 同样配置
$conf['basedir'] = '/谷仓/鸭子/';
现在 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://本地主机/农民对于基础,http://localhost/cow(重定向至http://localhost/bar/cow/doku.php,内部重写为http://localhost/farmer/?animal=cow) 对于第一只动物,第二只动物也是一样。
我不喜欢 nginx 链式加载的某些方面,但它确实有效(tm)