Skip to content
wzxjohn edited this page Sep 1, 2015 · 5 revisions

由于 Nginx 不支持 .htaccess 文件,所以如果你想使用 Nginx 的话需要进行额外的配置。

目前有两个方法让程序可以运行在 Nginx 环境下:(理论可行,没有测试


  • 方法一(推荐): 在 Nginx 的配置文件中添加如下代码来代替 .htaccess

      location / {
        rewrite ^/(welcome(/index)?|index(\.php)?)/?$ / redirect;
        rewrite ^/(.*)/index/?$ /$1 redirect;
        if (!-e $request_filename){
          rewrite ^/(.+)/$ /$1 redirect;
        }
        rewrite ^system.* /index.php/$1 break;
        if (!-e $request_filename){
          rewrite ^/(.*)$ /index.php/$1 break;
        }
      }
    

本段代码使用 http://winginx.com/en/htaccess 转换而来,没有经过测试。


本方法会导致程序运行过程中出现问题,请不要使用!

* 方法二:

application/config/config.php 中查找:

$config['index_page'] = '';

将其修改为:

$config['index_page'] = 'index.php';

本方法通用性强,但是带来的弊端是所有的链接中都会多出index.php,如 https://ss.qaq.moe/index.php/user.html

来自网友的配置教程: 刚踩了一下坑,研究了下这个 moess 配置 nginx 的关键在于开启 nginx 的 pathinfo 支持,不然的话弹一堆 404 ,需要注意的地方是: 1 、添加重定向

location / { 
if (!-e $request_filename ) { 
rewrite ^/(.*)$ /index.php/$1 last; 
break; 
} 
} 

2 、 fastcgi 配置

location ~ \.php { 
try_files $uri =404; 
fastcgi_pass 127.0.0.1:9000; 
fastcgi_index index.php; 
include fcgi_pathinfo.conf; 

include fastcgi_params; 
set $real_script_name $fastcgi_script_name; 
if ($fastcgi_script_name ~ "^(.+?\.php )(/.+)$") { 
set $real_script_name $1; 
set $path_info $2; 
} 

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
fastcgi_param SCRIPT_NAME $real_script_name; 
fastcgi_param PATH_INFO $path_info; 
} 

注意此处的.php 后面的$符号要删去,切记如此 3 、 fcgi_pathinfo.conf 的内容

#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
#fastcgi_param SCRIPT_NAME $fastcgi_script_name; #这两行是需要注释掉的,请注意 
fastcgi_param QUERY_STRING $query_string; 
fastcgi_param REQUEST_METHOD $request_method; 
fastcgi_param CONTENT_TYPE $content_type; 
fastcgi_param CONTENT_LENGTH $content_length; 

fastcgi_param REQUEST_URI $request_uri; 
fastcgi_param DOCUMENT_URI $document_uri; 
fastcgi_param DOCUMENT_ROOT $document_root; 
fastcgi_param SERVER_PROTOCOL $server_protocol; 
fastcgi_param HTTPS $https if_not_empty; 

fastcgi_param GATEWAY_INTERFACE CGI/1.1; 
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 

fastcgi_param REMOTE_ADDR $remote_addr; 
fastcgi_param REMOTE_PORT $remote_port; 
fastcgi_param SERVER_ADDR $server_addr; 
fastcgi_param SERVER_PORT $server_port; 
fastcgi_param SERVER_NAME $server_name; 

# PHP only, required if PHP was built with --enable-force-cgi-redirect 
fastcgi_param REDIRECT_STATUS 200; 

然后 nginx -t 测试一下, nginx -s reload 重新读取配置文件后大功告成,写在这里给以后踩坑的同学们看一下

Clone this wiki locally