도쿠위키를 만들려고 하는데 이 팜을 활용하고 싶습니다.
그러나 지침은 아파치에 대한 것이기 때문에 어려움을 겪고 있습니다. 도쿠위키가 제대로 작동하도록 할 수는 있지만 다시 작성하여 실제로 작동하는 팜 개념을 생성할 수는 없습니다.
제가 항상 사용하는 참고 자료는 다음과 같습니다.
https://www.dokuwiki.org/farms
https://www.dokuwiki.org/farms:example01
https://www.dokuwiki.org/tips:redirect_farm
그 중 특히 2단계에서 제가 주목하고 있는 것이 바로 Redirect_farm입니다.URL 바인딩 설정
여기서는 Apache에서 .htaccess를 사용하는 간단한 URL 재작성 방법을 설명합니다.
다음 내용을 /var/www/barn/.htaccess에 복사합니다.
.htaccess
RewriteEngine On
RewriteRule ^/?([^/]+)/(.*) /farmer/$2?animal=$1 [QSA]
RewriteRule ^/?([^/]+)$ /farmer/?animal=$1 [QSA]
Options +FollowSymLinks
테스트: 브라우저에서 다음을 가리킵니다.http://localhost/barn/foo. 농부 지수를 확인해야 합니다. 방향http://localhost/barn/foo/bar. "요청한 URL /farmer/bar를 찾을 수 없습니다"라는 404 오류가 표시됩니다. 이는 URL 바인딩이 유효함을 나타냅니다.
테스트가 실패하는 경우:
.htaccess는 Apache 구성에서 활성화되어야 합니다(AllowOverride All). mod_rewrite가 포함되어야 합니다. 리디렉션 루프가 있는 경우 DocumentRoot는 /var/www/(/var/www/farmer/ 또는 /var/www/barn/ 아님)여야 합니다.
이를 다시 만들고 동등한 재정의를 포함하기 위한 희박한 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; }
location / {
autoindex on;
}
location /barn/ {
#try_files $uri $uri/ /wiki/doku.php @wiki;
autoindex on;
#alias /var/www/localhost/htdocs/farmer;
rewrite ^/?([^/]+)/(.*) /farmer/$2?animal=$1 ;
rewrite ^/?([^/]+)$ /farmer/?animal=$1 ;
}
#location ~ \.php$ {
# try_files $uri =404;
# include /etc/nginx/fastcgi.conf;
# fastcgi_pass 127.0.0.1:9000;
#}
}
내가 갈 때http://localhost이해합니다"농장주" 그리고"외양간".찾을 때"농장주"로 기재되어 있습니다"농장주내가 "The Barn"에 들어갔을 때 "Farmer"로 나열되어 있었기 때문에 재작성 측면이 작동하고 있었습니다.
하지만...http://localhost/barn/foo404를 반환합니다. 이것이 나열되어야 합니다.농장주. 디버그 로그를 확인하세요.
2018/07/07 15:25:41 [notice] 17845#17845: *1 "^/?([^/]+)/(.*)" matches "/barn/", client: 127.0.0.1, server: localhost, request: "GET /barn/ HTTP/1.1", host: "localhost", referrer: "http://localhost/"
2018/07/07 15:25:41 [notice] 17845#17845: *1 rewritten data: "/farmer/", args: "animal=barn", client: 127.0.0.1, server: localhost, request: "GET /barn/ HTTP/1.1", host: "localhost", referrer: "http://localhost/"
정규식이 감지되었지만 다시 쓰기 오류가 발생했습니다...animal=barn은 이와 같아서는 안 됩니다.
비슷하게:
2018/07/07 15:25:44 [notice] 17845#17845: *1 rewritten data: "/farmer/foo/", args: "animal=barn", client: 127.0.0.1, server: localhost, request: "GET /barn/foo/ HTTP/1.1", host: "localhost"
2018/07/07 15:25:44 [notice] 17845#17845: *1 "^/?([^/]+)$" does not match "/farmer/foo/", client: 127.0.0.1, server: localhost, request: "GET /barn/foo/ HTTP/1.1", host: "localhost"
2018/07/07 15:25:44 [error] 17845#17845: *1 "/var/www/localhost/htdocs/farmer/foo/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /barn/foo/ HTTP/1.1", host: "localhost"
꽤 가까워진 것 같지만 이제 nginx rewrite나 dokuwiki에 필요한 것이 무엇인지 이해하지 못하는 지점에 이르렀습니다. 다이버가 있나요?
답변1
뭐, 이미 대답했는데…
/var/www/localhost/htdocs/farmer도쿠위키의 기본이다
/var/www/localhost/htdocs/barn내 농장이 포함된 디렉토리입니다.
/var/www/localhost/htdocs/barn/cow최초의 동물이다
/var/www/localhost/htdocs/barn/duck두 번째 동물이에요
farmer/inc/preload.php 프롬프트에 따라 구성하십시오:
if(!define('DOKU_FARMDIR')) 정의('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/소(다음으로 리디렉션http://localhost/barn/cow/doku.php, 내부적으로 다음과 같이 다시 작성됨http://localhost/farmer/?animal=cow) 첫 번째 동물의 경우, 두 번째 동물의 경우에도 마찬가지입니다.
나는 nginx 체인 로딩의 모든 측면을 좋아하지는 않지만 작동합니다 (tm)