nginx伪静态的问题

离开江湖 发布于 2013/11/14 18:03
阅读 864
收藏 0

我的网站有两种语言,中文+英文

如果用pathinfo访问的话应该是这样

中文:

http://www.com/index.php/product/category/a1/

英文:

http://www.com/en.php/product/category/a2/

程序如果开重写模式的话应该是这样

http://www.com/cn/product/category/a1/

http://www.com/en/product/category/a1/

在apache中我已经实现了,规则如下

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cn/(.*)$ index.php/$1 [L]
RewriteRule ^en/(.*)$ en.php/$1 [L]
</IfModule>
但是在nginx中我试两种方法,如

1.

if (!-f $request_filename){
	set $rule_0 1$rule_0;
}
if (!-d $request_filename){
	set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
	rewrite ^/cn/(.*)$ /index.php/$1 last;
}
	rewrite ^/en/(.*)$ /en.php/$1 last;
2.

location /cn/ {
    if (!-e $request_filename){
        rewrite ^/cn/(.*)$ /index.php/$1 last;
    }
}
两种方法都不能生效,求大神给个解决的方法呀

加载中
0
离开江湖
离开江湖
额,一直没人理呀
0
养大虾
养大虾
if (!-e $request_filename){  
    rewrite ^/cn/(.*) /index.php/$1 last;  
    rewrite ^/en/(.*) /en.php/$1 last;  
}

-e就可以同时判断是否是目录或文件。
nginx默认是没有pathinfo的,要开启(放在伪静态规则后面):

location ~ .+\.php($|/) {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi.conf;
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
}

实践版本: nginx/1.2.5

返回顶部
顶部