翻转含Laravel子应用的PHP应用目录结构并更新Nginx配置
目录结构调整后的Nginx配置更新方案
我来帮你梳理下目录调整后Nginx配置的更新思路和具体方案,适配你的新目录结构:
首先咱们明确核心需求:
- 大部分常规请求要走Laravel的新
/public根目录,遵循Laravel的单入口路由规则 - 原遗留代码的请求(比如
/directory1开头的路径)要转发到/legacy目录下的对应文件
具体Nginx配置示例
你可以根据实际域名、路径、PHP版本调整以下配置:
server { listen 80; server_name your-domain.com; # 替换为你的实际域名 # 默认根目录指向Laravel的新public目录 root /path/to/your/project-root/public; index index.php index.html index.htm; # 处理遗留代码请求:优先匹配原遗留路径,路由到legacy目录 location ^~ /directory1 { root /path/to/your/project-root/legacy; try_files $uri $uri/ /directory1/script1.php?$query_string; # 遗留PHP脚本的执行规则 location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 替换为你的PHP-FPM套接字路径 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } # Laravel常规请求路由:非静态文件请求转发到index.php location / { try_files $uri $uri/ /index.php?$query_string; } # Laravel的PHP执行规则 location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 替换为你的PHP-FPM套接字路径 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 静态文件缓存优化(可选) location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } }
关键配置说明
- 根目录优先级:默认根目录设为Laravel的
/public,确保大部分请求走Laravel - 遗留路径匹配:
location ^~ /directory1用^~标记高优先级,避免和Laravel的正则路由冲突,自动将请求映射到/legacy/directory1下的文件 - PHP处理隔离:分别为遗留代码和Laravel配置PHP-FPM规则,确保两类脚本都能正常执行
- Laravel单入口:
location /里的try_files规则,确保所有非静态文件请求都转发到Laravel的index.php,符合框架路由逻辑
额外注意事项
- 替换配置中的
/path/to/your/project-root为你的实际项目根目录路径 - 根据你的PHP版本调整PHP-FPM套接字路径(比如
php7.4-fpm.sock或php8.1-fpm.sock) - 若有多个遗留目录,可复制
location ^~ /directory1块,修改路径为其他遗留目录即可 - 配置修改后,执行
nginx -t检查语法正确性,再重启Nginx生效
内容的提问来源于stack exchange,提问作者Jeff Lambert
相关产品推荐
相关产品推荐

