10355
やりたいことは  
<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"
    
```

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

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

```

    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が実行されずにダウンロードされます。
CC BY-SA 3.0
2015-05-11T02:30:47.773
10018
2015-05-19T03:48:31.040
2015-05-19T03:48:03.357
9672
9672
question
nginx phpmyadmin
phpmyadminをサブディレクトリで運用できない
* * *

## 自己解決です。

```

    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にリライトしており本来の趣旨とは外れるので却下です。  
誰かの参考になればと思い記録しておきます。
CC BY-SA 3.0
2015-05-19T03:48:31.040
10355
2015-05-19T03:48:31.040
9672
10018
answer