Nginx具体重写

我很困惑在nginx重写。 请帮助我,如果可以..谢谢

xxxx.conf

#vhost-xxxxx server { listen 80; server_name xxxx.xxxx.com; root /var/www/html; index index.php index.html index.htm; charset utf-8; access_log logs/xxxxxx.access.log; } #rewrite if (!-e $request_filename) { rewrite ^(.+)$ /cn/index.php?q=$1 last; } location ~ \.php$ { root /var/www/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 

你好,我的nginx指向/ var / www / html根目录下的/ var / www / html我有3个文件夹cn,my,en

所以对于那里的configuration,如果我继续到xxxxx.xxxxx.com/cn/这将是没有问题的。

但是当我处理到xxxxx.xxxxx.com/en或/我的它显示403禁止。

我做这些设置之前尝试

 #rewrite if (!-e $request_filename) { rewrite ^(.+)$ /cn/index.php?q=$1 last; rewrite ^(.+)$ /en/index.php?q=$1 last; rewrite ^(.+)$ /my/index.php?q=$1 last; } 

但只为cn它会起作用,其他将被禁止。

我怎么做,如果我的用户去/ en它会重写

 rewrite ^(.+)$ /en/index.php?q=$1 last; 

或者我的用户去/我将重写

 rewrite ^(.+)$ /my/index.php?q=$1 last; 

我怎么能使它具体

ps://我的域名一路都是一样的。

谢谢你,谢谢你的帮助

三个重写规则具有相同的正则expression式,所以只有第一个会被执行。 我build议你使用locationtry_files指令而不是ifrewrite

 server { listen 80; server_name example.com; charset utf-8; access_log logs/xxxxxx.access.log; root /var/www/html; index index.php; location = / { return 301 /cn/; } location / { try_files $uri $uri/ /cn/index.php?q=$uri; } location /en { try_files $uri $uri/ /en/index.php?q=$uri; } location /my { try_files $uri $uri/ /my/index.php?q=$uri; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

注意:我已经删除并重新sorting了PHP位置块中的一些指令。

如果你想将上面的代码合并成一个正则expression式(这可能效率较低但可扩展):

 server { listen 80; server_name example.com; charset utf-8; access_log logs/xxxxxx.access.log; root /var/www/html; index index.php; location = / { return 301 /cn/; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ "^(?<lang>/\w{2})/" { try_files $uri $uri/ $lang/index.php?q=$uri; } } 

看到这个 nginx指令及其文档的列表。

编辑:添加index指令两个例子, location =第一个例子,并$uri/到每个try_files在这两个例子。 添加try_files到PHP位置以获得完整性。