apache未执行php脚本的本质是请求未交由php解析器处理,而是被当作普通文件下载或返回;主因包括php模块未加载、.php后缀未绑定处理器、文件权限/编码/访问方式错误及fastcgi重写规则不兼容。

PHP脚本在Apache中不执行,本质是请求没交给PHP解析器处理,而是被当成普通文件返回或下载。常见原因集中在模块加载、配置绑定、权限与环境三类。
Apache根本没加载PHP模块
这是最基础也最容易忽略的一环。如果php_module没启用,Apache连PHP是什么都不知道。
- 运行
apachectl -M | grep php(Linux/macOS)或httpd -M | findstr php(Windows),无输出就说明模块未加载 - Ubuntu/Debian系统需确保
/etc/apache2/mods-enabled/php*.load和php*.conf是真实存在的符号链接 - CentOS/RHEL要检查
/etc/httpd/conf.d/php.conf中LoadModule php_module modules/libphp.so是否启用且路径存在 - 修改后必须重启服务:
sudo systemctl restart apache2或sudo service httpd restart
PHP后缀未正确绑定处理器
模块加载了,但Apache不知道.php文件该由谁来跑。
- 配置中必须有明确的处理器声明,推荐用 Apache 2.4+ 标准写法:
<filesmatch> SetHandler application/x-httpd-php </filesmatch> - 旧式写法
AddHandler application/x-httpd-php .php仍可用,但若同时用了 PHP-FPM,则必须改用ProxyPassMatch指向 FPM socket - 虚拟主机配置会覆盖全局设置,检查
<virtualhost></virtualhost>块内是否误加了php_admin_value engine Off
文件权限、编码或访问方式错误
看似无关,却常导致“代码直接显示”或“403拒绝访问”。
- PHP文件需为 UTF-8 无BOM 编码;UTF-16会导致
<?php标签无法识别 - 文件权限建议
644,所在目录(含所有父级)需有执行权限(x位),例如/var/www/html应为755 - 必须通过
http://localhost/index.php访问,不能用file:///var/www/html/index.php打开,否则浏览器绕过服务器直接读文件
FastCGI环境下重写规则不兼容
Laravel、ThinkPHP等框架的 .htaccess 在 FastCGI 模式下容易失效,引发“No input file specified”。
- 错误写法:
RewriteRule ^(.*)$ /index.php/$1 [L](丢失 PATH_INFO) - 正确写法(二选一):
RewriteRule ^(.*)$ /index.php?/$1 [L]
或更健壮的:RewriteRule ^(.*)$ /index.php [L,E=PATH_INFO:$1] - 同时确认
RewriteBase与实际部署路径一致,子目录部署不能漏写
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











