Nginx:子文件夹的重写规则

Nginx:子文件夹的重写规则

我有一个子域名,我想将我正在从事的项目保存在其中,以便向客户展示这些项目。

这是来自 /etc/nginx/sites-available/projects 的配置文件:

server {
    listen   80;
    server_name projects.example.com;
    access_log /var/log/nginx/projects.example.com.access.log;
    error_log /var/log/nginx/projects.example.com.error.log;

    location / {
        root   /var/www/projects;
        index  index.html index.htm index.php;
    }

    location /example2.com {
        root   /var/www/projects;
        auth_basic           "Stealth mode";
        auth_basic_user_file /var/www/projects/example2.com/htpasswd;
    }

    location /example3.com/ {
        index  index.php;

        if (-f $request_filename) {
            break;
        }
        if (!-f $request_filename) {
            rewrite ^/example3\.com/(.*)$ /example3\.com/index.php?id=$1 last;
            break;
        }
    }

    location ~ \.php {
        root /var/www/mprojects;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

我希望能够在子文件夹中放置不同的 php 引擎(wordpress、getsimple 等)。这些引擎具有不同的查询参数(id、q、url 等),因此为了使 preety URL 正常工作,我必须进行重写。但是,上面的方法不起作用。这是我得到的响应:

Warning: Unknown: Filename cannot be empty in Unknown on line 0
Fatal error: Unknown: Failed opening required '' (include_path='.:/usr/local/lib/php') in Unknown on line 0

如果我拿出“位置 /example3.com/“规则,则一切正常,但没有漂亮的 URL。请帮忙。

配置基于这个帖子: https://stackoverflow.com/questions/2119736/cakephp-in-a-subdirectory-using-nginx-rewrite-rules

我正在使用带有 php-fpm 的 Ubuntu 9.10 和 nginx/0.7.62。

答案1

在重写的第二部分中,不能转义句点 (.):

rewrite ^/example3\.com/(.*)$ /example3\.com/index.php?id=$1 last;

应该

rewrite ^/example3\.com/(.*)$ /example3.com/index.php?id=$1 last;

但你的ID看起来像什么?如果是数字,你可以试试这个:

location /example3.com/ {
    index  index.php;
    rewrite "^/example3\.com/([0-9]+)$" /example3.com/index.php?id=$1 break;
}

相关内容