我认为在Nginx中重写是直截了当的。看起来不是。
我想得到你们的帮助。我以前的设置是Apache2 + PHP。我的新设置是Nginx + PHP-FPM。
我想从Apache2转换一个简单的虚拟主机。
目录结构是:
/ api(这是root)
VERSION(1)
--- api.php
--- .htaccess
Fx的。使用domain.tld / 1 /
.htaccess文件如下所示:
RewriteEngine on
RewriteRule ^([a-z]+)/([a-z]+)/api.json$ api.php?app=$1&sapp=$2 [L,QSA]
RewriteRule ^([a-z]+)/api.json$ api.php?app=$1 [L,QSA]
我的新Nginx服务器文件如下所示:
server {
listen 80;
root /var/www/domain.tld/api;
index index.php index.html;
server_name domain.tld;
location /1/ {
rewrite ^/([a-z]+)/([a-z]+)/api\.json$ /api.php?app=$1&sapp=$2;
rewrite ^/([a-z]+)/api\.json$ /api.php?app=$1;
}
location ~ \.php$ {
include php5;
}
}
但是当我尝试查看时它不起作用:domain.tld / 1 / view / api.json或domain.tld / 1 / view / extended / api.json
任何人都可以解释并举一些例子来解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
在这里查看NGiNX如何处理location
块:http://nginx.org/en/docs/http/request_processing.html
正如您在案例中所看到的,请求仅由您的location /1/
块提供,因为这是两个匹配中唯一的一个。问题是,NGiNX每个请求只使用一个位置块,所以一旦进入location /1/
块,它就不会在以后转到其他位置块。
这里的解决方案是在最后的php5
块中包含您的location /1/
文件。
location /1/ {
rewrite ^/([a-z]+)/([a-z]+)/api\.json$ /api.php?app=$1&sapp=$2;
rewrite ^/([a-z]+)/api\.json$ /api.php?app=$1;
include php5;
}