Nginx:重写子文件夹的规则

我有一个子域,在那里我想保持我正在从事的项目,以便向客户展示这些项目。

这里是/ etc / nginx / sites-available / projects中的configuration文件:

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等)。 这些引擎有不同的querry参数(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 

如果我拿出“ location / example3.com/ ”规则,那么一切都可以正常工作,但是没有任何好的url。 请帮忙。

configuration是基于这个职位: https : //stackoverflow.com/questions/2119736/cakephp-in-a-subdirectory-using-nginx-rewrite-rules

我使用的是Ubuntu 9.10和nginx / 0.7.62和php-fpm。

您不能在重写的第二部分中跳过句点(。):

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

应该

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

但是你的身份证是什么样的? 如果是一个数字,你可以试试这个:

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