phpmyadminをサブディレクトリで運用できない

投稿者: Anonymous

やりたいことは
http://www.example.com/phpmyadmin にアクセスすると
/usr/share/phpMyAdmin にアクセスしてPHPを実行出来る様にする事です。

環境
NGINX1.8
PHP5.4

/opt/nginx/conf/nginx.conf

location ^~ /phpmyadmin {
  rewrite_log on;
  error_log /opt/nginx/logs/phpmyadmin_error.log notice;
  root /usr/share/phpMyAdmin;
  rewrite ^/phpmyadmin/(.*)$ /$1 break;
    location ~ .php$ {
      fastcgi_pass    127.0.0.1:9000;
      fastcgi_index   index.php;
      fastcgi_param   SCRIPT_FILENAME /usr/share/phpMyAdmin$fastcgi_script_name;
      include         fastcgi_params;
    }
}

/opt/nginx/logs/phpmyadmin_error.log

2015/05/11 11:20:30 [error] 51293#0: *1 access forbidden by rule, client: XXX.XXX.XXX.XXX, server: www.example.com, request: "GET /phpmyadmin/index.php HTTP/1.1", host: "www.example.com"

もう3日悩んでいます。回答でなくてもヒントでもいいのでお願いします。

アドバイスいただいた件も含めて修正しました。

location ~* ^/phpmyadmin/(.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
  alias /usr/share/phpMyAdmin/$1;
}

location ~* ^/phpmyadmin/(.+.php)$ {
  alias /usr/share/phpMyAdmin/$1;
  index index.php
  fastcgi_pass    127.0.0.1:9000;
  fastcgi_index   index.php;
  include         fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

これでエラーはでなくなりましたがphpが実行されずにダウンロードされます。

解決


自己解決です。

location ^~ /phpmyadmin {
  alias /usr/share/phpMyAdmin;
  index index.php index.html;
  location ~ ^/phpmyadmin/(.+.php)$ {
    alias /usr/share/phpMyAdmin/$1;
    fastcgi_index index.php;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include       fastcgi_params;
  }
}

ポイントはlocationディレクティブの優先順位を確認する事!
locationにrootを使用しない事!
むやみにrewriteを使用しない事!

途中であきらめかけてこんなコードも書いたりしました。

location /phpmyadmin {
  rewrite ^/phpmyadmin(/|)$ /phpMyAdmin/index.php redirect;
}
location ~ ^/phpmyadmin/(.*)$ {
  rewrite ^/phpmyadmin/(.*)$ /phpMyAdmin/$1 redirect;
}
location ~ ^/phpMyAdmin/(.+.php)$ {
  root /usr/share;
  index index.php;
  fastcgi_pass  127.0.0.1:9000;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include       fastcgi_params;
}
location ~* ^/phpMyAdmin/(.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
  root /usr/share;
}

これでも機能しますがphpMyAdminにリライトしており本来の趣旨とは外れるので却下です。
誰かの参考になればと思い記録しておきます。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *