Nginx配置-在非常定制的设置中将路由传递到index.php
有些事情告诉我,我从一开始就采取的方式是错误的,这使得我很难解决这个新问题。。。但我们走了 设置 上述设置允许我的开发人员各自拥有自己的个人开发环境。转到:如果该项目目录中有php文件,则可以正常工作,该目录在本地将位于/opt/dev/[user]/www/[project]/目录中。单是这一点我就花了相当多的时间来弄明白,但现在我们有了一个新的难题,已经连续8个小时踢我的屁股了 注意:Regex是我编程的弱点,因此,nginx对这类东西的配置是基于Regex的,这让我非常头疼 问题 我需要能够检测[project]级别以外的路径何时不可访问,然后使用route参数将该请求重定向到项目级别的index.php,以便我们可以在php级别处理它 例如: 如果目录/opt/dev/[user]/www/[project]/something/else不存在(或者其中没有php文件),我需要请求转到/opt/dev/[user]/www/[project]/index.php,但我还想用一个“route”参数调用index.php,该参数给出url的其余部分 (即:index.php?route=something/else) 我希望这是有意义的,我真的希望有人能在这里帮助我。 我承认这可能意味着完全改变我的配置,但只要它有效,我不在乎 全源 这是我自上而下的整个配置文件:Nginx配置-在非常定制的设置中将路由传递到index.php,php,nginx,sysadmin,Php,Nginx,Sysadmin,有些事情告诉我,我从一开始就采取的方式是错误的,这使得我很难解决这个新问题。。。但我们走了 设置 上述设置允许我的开发人员各自拥有自己的个人开发环境。转到:如果该项目目录中有php文件,则可以正常工作,该目录在本地将位于/opt/dev/[user]/www/[project]/目录中。单是这一点我就花了相当多的时间来弄明白,但现在我们有了一个新的难题,已经连续8个小时踢我的屁股了 注意:Regex是我编程的弱点,因此,nginx对这类东西的配置是基于Regex的,这让我非常头疼 问题 我需要能
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www;
index index.php index.html index.htm index.nginx-debian.html;
server_name 192.168.20.200;
location / {
try_files $uri $uri/ =404;
}
location ~ ^/dev/([^\/]+?)\/(.*) {
alias /opt/dev/$1/www/$2;
autoindex on;
# PHP location check for personal dev environments
location ~ ^/dev/([^\/]+?)\/([^\/].+\/|)(.+\.php)$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$3;
fastcgi_param PHP_VALUE error_log=/opt/dev/$1/logs/php_errors.log;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
}
听起来你要做的是
try\u files
提供文件(如果存在),如果没有,则尝试下一个。类似的东西应该可以工作,我正在使用第三个regex块来捕获您的路由变量,我正在将其传递到报头中
location ~ ^/dev/(\w+)\/((?1))(.*) {
root /opt;
autoindex on;
add_header x-route $3;
try_files /dev/$1/www/$2$3/index.php /dev/$1/www/$2$3.php /dev/$1/www/$2$3/ /dev/$1/www/$2/index.php =404;
Nginx现在将尝试处理您对/dev/[user]/www/[project]/something/之类的请求:
首先尝试/opt/dev/[user]/www/[project]/something/else/index.php
下一步尝试/opt/dev/[user]/www/[project]/something/else.php
接下来,请尝试显示/opt/dev/[user]/www/[project]/something/else/
下一步,请尝试返回到/opt/dev/[user]/www/[project]/index.php
在php脚本中,$\u SERVER['HTTP\u X\u ROUTE']
的值将是'/something/else'
最后,如果这些工作都没有返回404 太棒了,非常感谢您的详细回复。。我明天去试一试。
location ~ ^/dev/(\w+)\/((?1))(.*) {
root /opt;
autoindex on;
add_header x-route $3;
try_files /dev/$1/www/$2$3/index.php /dev/$1/www/$2$3.php /dev/$1/www/$2$3/ /dev/$1/www/$2/index.php =404;