nginxと徳ウィキファーム

nginxと徳ウィキファーム

徳ウィキを作ろうとするのにこのファームを活用したいです。

しかし、ガイドラインはApacheに関するものであるため、困難に直面しています。ドクウィキが正常に動作するようにすることはできますが、再構築して実際に機能するファームの概念を生成することはできません。

私がいつも使っている参考資料は次のとおりです。

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/duck2番目の動物です。

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)

関連情報