如何在Ubuntu,nginx和CodeIgniter中启用URL重写



我已经在服务器上设置了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重写后我网站的主页。我该如何解决?

如果我正确理解了您的问题。

一种方法是在您的Web目录的根系上全球运行PHP。运行后,您可以指定每个位置将接受的文件。因此,如果您需要将PHP隔离到子目录,则可以更改目录的文件。

index index.html index.htm

带有子目录的示例nginx config:

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的配置。但是,需要为子目录指定位置。此堆栈帖子将向您展示如何在此处执行此操作。

另一种方法是将PHP隔离到子目录。与上述类似,仅更改此行

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

这篇文章有一个完整的示例。

实际上,我已经解决了问题。问题是要更改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;
        }

最新更新