Nginx / Fcgi:index.php与伪别名位置

时间:2015-06-04 00:21:28

标签: php nginx fastcgi

Debian Jessie上的Nginx 1.6.2

我想将所有 example.com/forum / 请求映射到 / path / to / htdocs / phpbb 并切断 / forum / 参与URI。 Stackoverflow上的某个人推荐“重写”解决方案,而不是“别名”,因为存在一些错误。

server
{
    listen [::]:80;
    server_name example.com;
    root /var/www/html;

    index index.php index.html;
    #try_files $uri $uri/ =404;

    location /forum/
    {
        root /path/to/htdocs/phpbb;
        rewrite ^/forum/(.*)$ /$1 break;

        location ~ .+\.php$
        {
            rewrite ^/forum/(.*)$ /$1 break;
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
    }
}

示例配置正常 - example.com/forum/viewtopic.php 执行脚本 /path/to/htdocs/phpbb/viewtopic.php - 但< strong> example.com / ( index.php )不起作用:

  

“/ var / www / html / index.php”失败(2:没有这样的文件或目录)

从服务器块中删除“index”行后:

  

“/ path / to / htdocs / phpbb /”的目录索引被禁止

“index”和/或“try_files”行移至位置区后:

  

index.php没有传递给php-fpm ...

好的,我的配置有什么问题?任何提示?

1 个答案:

答案 0 :(得分:0)

好的,别名是错误的(重写也是如此......),但是如果你避免使用 try_files 并使用if(即使是邪恶的......)它应该有效!

server
{
    listen [::]:80;
    server_name example.com;
    root /var/www/html;

    location /forum/
    {
        alias /path/to/htdocs/phpbb/;
        index index.php index.html;

        location ~ "^(/forum/)(.+\.php)(/.+){0,1}$"
        {
            if (!-f $document_root$2)
            {
                return 404;
            }

            fastcgi_index index.php;
            include fastcgi.conf;

            fastcgi_param  SCRIPT_FILENAME    $document_root$2;
            fastcgi_param  SCRIPT_NAME        $1$2;
            fastcgi_param  PATH_INFO          $3;

            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
    }
}

phpinfo()看起来不错,但还有一个问题:安全吗?