nginx와 도쿠위키 팜

nginx와 도쿠위키 팜

도쿠위키를 만들려고 하는데 이 팜을 활용하고 싶습니다.

그러나 지침은 아파치에 대한 것이기 때문에 어려움을 겪고 있습니다. 도쿠위키가 제대로 작동하도록 할 수는 있지만 다시 작성하여 실제로 작동하는 팜 개념을 생성할 수는 없습니다.

제가 항상 사용하는 참고 자료는 다음과 같습니다.

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)

관련 정보