用户
 找回密码
 入住 CI 中国社区
搜索
查看: 25054|回复: 11
收起左侧

[HELP] 求Nginx下CI的urlrewrite规则

[复制链接]
发表于 2012-2-7 13:50:41 | 显示全部楼层 |阅读模式
http://localhost/account/auth
在apache下可以的,但在nginx里就行不能了,显示404,
以下是nginx的配置节:

server {
        listen       8000;
        server_name  uc.xxx.com;
        location / {
            root   /u/game/html/UCenter;
            index  index.php index.html index.html;

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

        }
        location ~ \.php$ {
            root           /u/game/html/UCenter;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /u/game/html/UCenter$fastcgi_script_name;
            include        fastcgi_params;
        }
    }


只能通过http://localhost/index.php?c=account&m=auth来访问。
怎么改一下?
发表于 2012-2-7 15:22:40 | 显示全部楼层

  1. location / {
  2. index index.php;
  3. if (-f $request_filename/index.php){
  4. rewrite (.*) $1/index.php;
  5. }
  6. if (!-f $request_filename){
  7. rewrite (.*) /index.php;
  8. }
  9. }
复制代码

这个是从typecho的nginx的rewrite rule改的,我自己测试可以用。
或者,刚才还看到这个apache到nginx规则转换的网站,你可以试试,我自己没试过。
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
 楼主| 发表于 2012-2-7 17:15:58 | 显示全部楼层
huboo82 发表于 2012-2-7 15:22
这个是从typecho的nginx的rewrite rule改的,我自己测试可以用。
或者,刚才还看到这个apache到nginx规则 ...

按照你的修改之后,直接500错误了。。。
http://localhost/account/get
而这样却是可以访问的:
http://localhost/index.php?c=account&m=get

发表于 2012-2-7 17:37:48 | 显示全部楼层
改了nginx的配置需要重载生效
 楼主| 发表于 2012-2-7 18:18:58 | 显示全部楼层
huboo82 发表于 2012-2-7 17:37
改了nginx的配置需要重载生效

谢谢,重启了nginx,但还是500错,打开调试信息,发现rewrite后,一直无限重定向,才造成500错,以下是日志:
2012/02/07 18:23:51 [error] 23398#0: *2025 rewrite or internal redirection cycle while processing "/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/account/get", client: 172.17.170.28, server: localhost, request: "GET /account/get HTTP/1.1", host: "localhost:80"

怎么会这样呢?rewrite有错么?
发表于 2012-2-7 19:09:41 | 显示全部楼层
这是我正在用的,虚拟机,lnmp

  1. server
  2.         {
  3.                 listen       80;
  4.                 server_name [url]www.test.com[/url];
  5.                 index index.php index.html index.htm;
  6.                 root  /home/wwwroot;

  7.                 location ~ .*\.(php|php5)?$
  8.                         {
  9.                                 fastcgi_pass  unix:/tmp/php-cgi.sock;
  10.                                 fastcgi_index index.php;
  11.                                 include fcgi.conf;
  12.                         }
  13.                
  14.                 location / {
  15.                         index index.php;
  16.                         if (-f $request_filename/index.php){
  17.                                 rewrite (.*) $1/index.php;
  18.                         }
  19.                         if (!-f $request_filename){
  20.                                 rewrite (.*) /index.php;
  21.                         }
  22.                 }
  23.         }
复制代码
 楼主| 发表于 2012-2-8 08:44:42 | 显示全部楼层
huboo82 发表于 2012-2-7 19:09
这是我正在用的,虚拟机,lnmp

server {
        listen       80;
        server_name  localhost;
        location / {
            root   /u/game/html/www;
            index  index.php index.html index.htm;
             if (-f $request_filename/index.php){
                                rewrite (.*) $1/index.php;
                        }
                        if (!-f $request_filename){
                                rewrite (.*) /index.php;
                        }
        }

访问
http://localhost/account/get
还是出错:
2012/02/08 08:49:29 [error] 23398#0: *2061 rewrite or internal redirection cycle while processing "/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/account/get", client: 127.0.0.1, server: localhost, request: "GET /account/get HTTP/1.1", host: "127.0.0.1:80"

唉~~~
        location ~ .*\.(php|php5)?$
        {

        fastcgi_pass  127.0.0.1:8888;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi.conf;
       }
    }
发表于 2012-2-8 09:54:59 | 显示全部楼层
你试试装个 typecho 看看,这个也是单入口文件的,如果这个没问题,你就要查查你程序上的问题了。
 楼主| 发表于 2012-2-8 14:45:12 | 显示全部楼层
huboo82 发表于 2012-2-8 09:54
你试试装个 typecho 看看,这个也是单入口文件的,如果这个没问题,你就要查查你程序上的问题了。 ...

根目录下的index.php入口文件我,我只有
print_r($_GET);
exit;
为了调试,文件里只有这些内容。
我找个享悉配置的人看看吧。。
 楼主| 发表于 2012-2-8 15:34:25 | 显示全部楼层
终于找到一个可用的:

  1. server {

  2.     listen   8020;
  3.     root /u/game/html/BCenter/;
  4.     index index.php index.html index.htm;


  5.     location / {

  6.         if (-f $request_filename) {
  7.             expires max;
  8.             break;
  9.         }

  10.         if (!-e $request_filename) {
  11.             rewrite ^/(.*)$ /index.php/$1 last;
  12.         }
  13.     }

  14.     location = /50x.html {
  15.         root /var/www/nginx-default;
  16.     }

  17.     location /index.php {
  18.         fastcgi_pass 127.0.0.1:8888;
  19.         fastcgi_index index.php;
  20.         fastcgi_param SCRIPT_FILENAME /u/game/html/BCenter/index.php;
  21.         include fastcgi_params;
  22.     }
  23. }
复制代码


这个已经可用了。

本版积分规则