Php

Nginx:子文件夾的重寫規則

  • May 5, 2010

我有一個子域,我想在其中保留我正在處理的項目,以便向客戶展示這些項目。

這是來自 /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

如果我刪除“ location /example3.com/ ”規則,那麼一切正常,但沒有 preety URL。請幫忙。

配置基於這篇文章: https ://stackoverflow.com/questions/2119736/cakephp-in-a-subdirectory-using-nginx-rewrite-rules

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

您不能在重寫的第二部分中轉義句點 (.):

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;
}

引用自:https://serverfault.com/questions/131238