我使用nginx(php-fpm)和fatfree框架。我的路由引擎中需要一些重定向逻辑。它看起来像:
http://example.net/page/...
而不是点可能有类似的东西:
another.net/someurl
http://another.net/?local_query
another.net/path/to/article.html
它打破了nginx逻辑,我看到404错误。
我的nginx配置看起来很简单:
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include /etc/nginx/conf.d/fastcgi_params.conf;
fastcgi_param SCRIPT_FILENAME /var/www/$main_host/www$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/$main_host/www;
fastcgi_param PHP_ADMIN_VALUE upload_tmp_dir=/var/www/$main_host/tmp/upload;
fastcgi_param PHP_ADMIN_VALUE session.save_path=/var/www/$main_host/tmp/sessions;
}
所以当我使用:
http://example.net/page/another.net/path/to/article.html
根据我的理解,Nginx会尝试在名为article.html
的文件系统中查找文件。如果在域之后有关键字page
时,如何编写规则来忽略任何符号?
答案 0 :(得分:1)
可能它不起作用,因为fastcgi_pass
内没有/etc/nginx/conf.d/fastcgi_params.conf
指令。
如果是这样,您只需将其添加到\.php$
位置即可。一般情况下看起来像:
fastcgi_pass 127.0.0.1:9000;
但这一行可能会有所不同,具体取决于PHP-FPM的配置方式。
当URI以.php
结尾时,您当前的配置会使Nginx向PHP-FPM传递请求。
要让URI在/page/
开始时使用Nginx,你应该写一个新的location
,内容几乎相同({1}}行除外)和(重要!)把它放在现有的SCRIPT_FILENAME
位置之前。
复制\.php$
内容会导致代码重复,我建议以稍微不同的方式编写配置:
location
在这种情况下,您将有2个场景:
fastcgi_param SCRIPT_FILENAME /var/www/$main_host/www$my_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/$main_host/www;
fastcgi_param PHP_ADMIN_VALUE upload_tmp_dir=/var/www/$main_host/tmp/upload;
fastcgi_param PHP_ADMIN_VALUE session.save_path=/var/www/$main_host/tmp/sessions;
include /etc/nginx/conf.d/fastcgi_params.conf;
location ~ /page/ {
fastcgi_pass 127.0.0.1:9000;
set $my_script_name /path/to/file.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
set $my_script_name $fastcgi_script_name;
}
开头,则Nginx将运行/page/
。/var/www/$main_host/www/path/to/file.php
结尾,Nginx将像往常一样运行请求的php文件。
保留.php
位置,并在之前放置以下位置:
\.php$
只需将location ~ ^/page/ {
include /etc/nginx/conf.d/fastcgi_params.conf;
fastcgi_param SCRIPT_FILENAME /var/www/$main_host/www/path/to/file.php;
fastcgi_param DOCUMENT_ROOT /var/www/$main_host/www;
fastcgi_param PHP_ADMIN_VALUE upload_tmp_dir=/var/www/$main_host/tmp/upload;
fastcgi_param PHP_ADMIN_VALUE session.save_path=/var/www/$main_host/tmp/sessions;
}
替换为应处理此类请求的文件的实际路径。