Nginx在相同位置重写.php到.php
我正在尝试将一个包含大量(.92).htaccess文件的站点从Apache移动到Nginx。 有800多个重写规则要转换。为了优化性能,我决定 将规则放在单独的嵌套位置块下(总共61个块)。
但是我在重写一些规则时遇到了问题。
index index.php;
#
# Location Specific Rules
#
location /test/abc/ {
location /test/abc/pics/ {
# For ensuring 'serve directly, if file exists' condition of Rule 2
try_files $uri @rewrite_pics;
}
location /test/abc/def/ {
try_files $uri $uri/index.php @rewrite_def;
}
}
location /test/ {
rewrite "^/test/([a-z-]+)$" /test/$1.html permanent; # Rule 3
rewrite "^/test/([a-z-]+).html$" /test/index.php?symbol=$1 last; # Rule 4
}
location @rewrite_pics {
rewrite "^/test/abc/pics/$" /test/abc/wallpapers/ permanent; # Rule 1
rewrite "^/test/abc/pics/([0-9]+)/(.*)$" /test/abc/pics/pic.php?width=$1&height=$1&pic=$2 last; # Rule 2
}
location @rewrite_def {
rewrite "(?i)^/test/abc/def/year-([a-z]+).php$" /test/abc/def/index.php?year=$1 last;
}
#
# Fallback Rules
#
location ~* \.(gif|jpg|jpeg|png|ico|3gp|flv|mpg|mpeg|mp4|mp3|swf|txt|xml|pdf|zip)$ {
expires 1M; # Rule 5
try_files $uri /404.php;
}
location ~ (\.php|\.html|/)$ {
try_files $uri "${uri}index.php" /fallback.php =404;
include php-fpm.conf;
}
php-fpm.conf
include fastcgi.conf;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
~
前缀,则永远不会执行回退规则。
/test/abc/pics/800/a.jpg
的请求将被重写为/test/abc/pics/pic.php
,这将再次与include php-fpm.conf;
匹配
相同的位置配置。因此文件不会被执行并按原样下载。/test/abc/pics/
”添加到所有位置块(命名位置除外)。但这会导致一切
.jpg
下的请求(包括现有的.php
文件)传递给PHP-FPM。这导致访问被拒绝错误,
由于security.limit_extensions
仅允许{{1}}分机。我在这里做错了什么?是否有一种简单的方法可以根据扩展名提供所有现有文件 并且只有不存在的文件与位置块/重写规则匹配?