上线PHP项目前须确认三件事:PHP版本匹配并启用php-fpm/mod_php支持;Apache需启用mod_rewrite且AllowOverride All,Nginx需正确配置fastcgi_pass指向php-fpm socket;环境变量和数据库配置须替换为生产值并清除缓存。

直接把本地 PHP 项目扔到服务器就行?别急,先看这三件事
不是所有 PHP 网站丢进 /var/www/html 就能访问。常见失败原因:PHP 版本不匹配、.htaccess 规则被忽略、数据库连接配置没改。上线前必须确认服务器已安装对应版本的 php-fpm(或 mod_php),且 Web 服务(如 Nginx/Apache)已启用 PHP 解析支持。
Apache 下怎么让 index.php 成为默认首页且支持 URL 重写
很多动态站依赖 index.php 入口 + 路由重写(比如 Laravel、ThinkPHP)。Apache 默认可能只认 index.html,需手动开启 mod_rewrite 并配置 AllowOverride All。
- 运行
a2enmod rewrite启用模块 - 在站点配置中(如
/etc/apache2/sites-available/000-default.conf)的块内添加:
AllowOverride All
Require all granted - 确保项目根目录有正确的
.htaccess文件(Laravel 的默认规则可直接复用)
Nginx 怎么正确转发 PHP 请求给 php-fpm
Nginx 不自带 PHP 解析能力,必须显式把 .php 请求代理给 php-fpm。漏掉 fastcgi_pass 或路径错配,就会出现“File not found”或直接下载 index.php 源码。
- 检查
php-fpm是否运行:systemctl status php8.1-fpm(版本按实际调整) - 在 server 块中加入 location 块:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
} -
fastcgi_pass的 socket 路径必须和php-fpm.conf中listen =项完全一致
环境变量和数据库配置千万别硬编码进 git
本地 .env 文件里的 DB_HOST、APP_KEY 等,上线后必须替换——否则要么连不上数据库,要么加密失效导致 session/cookie 异常。
立即学习“PHP免费学习笔记(深入)”;
- 用
php artisan key:generate(Laravel)或手动设置新APP_KEY,避免本地密钥泄露 - 数据库密码不要写死在
config/database.php;优先通过getenv()或$_SERVER读取 - 部署时用
scp或rsync同步代码,再单独上传生产环境的.env(禁止包含在 git 中)
最常被跳过的一步:清空缓存。Laravel 要跑 php artisan config:clear 和 php artisan cache:clear;ThinkPHP 则删掉 runtime/cache/ 目录。缓存没清,改了配置也白搭。











