如何在 Ubuntu、nGinx 和 codeigniter 中启用 URL 重写?

How to enable URL rewrite in Ubuntu, nGinx and codeigniter?

我已经在服务器上设置了 ubuntu、php5.6、nGinx,并且在我配置的网站下部署了几个项目。我需要部署在一个目录下的一个项目是在codeigniter中开发的,我已经配置了nGinx配置如下:

 location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
                expires max;
                log_not_found off;
        }

        location / {
                # Check if a file or directory index file exists, else route it to index.php.
                try_files $uri $uri/ /index.php;
        }

        location ~* \.php$ {
                fastcgi_pass unix:/run/php/php5.6-fpm.sock;
                include fastcgi.conf;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }

URL 现在不说 404,但在 URL 重写后显示我网站的主页。我该如何解决这个问题?

如果我没有正确理解你的问题。

一种方法是 运行 PHP 全局访问您的 Web 目录的根目录。一旦你拥有它 运行ning 你就可以指定每个位置将接受的文件。因此,如果您需要将 PHP 隔离到子目录,那么您可以更改该目录允许的文件。

index index.html index.htm

带有子目录的示例 Nginx 配置:

server {
   listen   80;
   server_name mysite.com www.mysite.com;

   root   /path/to/your/website.com/;

   index index.html index.htm

   error_log log/error.log;

   # set expiration of assets to MAX for caching
   location ~* .(ico|css|js|gif|jpe?g|png)(?[0-9]+)?$ {
       expires max;
       log_not_found off;
   }

   # main codeigniter rewrite rule or sub-directory

   location /codeigniter {
       alias /path/to/your/website.com/codeigniter/;
       try_files $uri $uri/ /index.php;
   }

   # php parsing 
   location ~ .php$ {
        root           /path/to/your/website.com/;
        try_files $uri =404;
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 4k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
}

我不是 Codeigniter 用户,因此无法共享 PHP 的配置。但是需要为子目录指定位置。此堆栈 post 将向您展示如何执行此操作 here

另一种方法是将 PHP 隔离到子目录。和上面类似,只改这一行

# php parsing 
location ~ /codeigniter/.+\.php$

这个 post 有一个完整的例子 approach

实际上,我已经解决了这个问题。问题是更改 fastcgi_param 并且它工作正常。谢谢@edlee

location /6 {
                alias /var/www/html/6/;
                try_files $uri $uri/ /6/index.php;
        }



        location ~* \.php$ {
                fastcgi_pass unix:/run/php/php5.6-fpm.sock;
                root /var/www/html/;
                try_files $uri =404;
                fastcgi_index  index.php;
                fastcgi_param   SCRIPT_FILENAME $request_filename;
                include fastcgi_params;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 256 4k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_temp_file_write_size 256k;
        }