如何在IIS服务器为各站点设置PHP版本?Laravel 9部署遇错求助
IIS部署Laravel 9时PHP版本配置与web.config异常的解决方案
一、给指定站点绑定正确PHP版本
Laravel 9要求PHP 8.0及以上版本,按以下步骤操作:
- 先确认目标PHP版本已安装,且开启了Laravel必需的扩展:
openssl、pdo_mysql、mbstring、fileinfo、tokenizer、ctype(找到php.ini对应项,去掉前面的分号即可启用) - 打开IIS管理器,找到目标站点,右键选择「PHP管理器」,点击「更改PHP版本」,勾选对应版本的PHP池即可完成绑定
- 如果找不到对应版本选项,手动注册到IIS:打开管理员命令提示符,先执行
你的PHP安装路径\php-cgi.exe -v确认版本正常,再运行以下命令完成注册:
appcmd set config /section:system.webServer/fastCgi /+"[fullPath='你的PHP安装路径\php-cgi.exe',arguments='',maxInstances=10,idleTimeout=300,activityTimeout=300,requestTimeout=900,instanceMaxRequests=10000,protocol='NamedPipe',flushNamedPipe='False']"
注册完成后回到站点的PHP管理器重新绑定版本即可
二、阻止web.config自动更改并修复配置
IIS修改站点设置时经常会自动篡改web.config,按以下步骤处理:
- 先备份当前的web.config文件,避免操作失误导致无法恢复
- 手动替换成Laravel专用的web.config内容,覆盖自动生成的版本:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Laravel" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" /> </rule> </rules> </rewrite> <defaultDocument> <files> <add value="index.php" /> </files> </defaultDocument> <handlers> <add name="PHP_via_FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="你的PHP安装路径\php-cgi.exe" resourceType="Either" requireAccess="Script" /> </handlers> </system.webServer> </configuration>
- 将web.config设置为只读:右键文件→属性→安全→编辑→给IIS应用池用户(一般为
IIS AppPool\你的站点池名称)添加「拒绝修改」权限,防止文件被自动篡改 - 把站点应用池的.NET版本设置为「无托管代码」,Laravel是PHP项目,不需要.NET托管环境
三、常见报错排查
- 遇到500内部服务器错误时,打开IIS的「错误页」功能,设置为显示详细错误信息,即可定位具体问题
- 检查Laravel项目的
storage和bootstrap/cache目录权限,给应用池用户分配读写权限,否则会出现权限相关报错 - 生产环境中执行
php artisan config:cache和php artisan route:cache优化配置,同时确认.env文件中的APP_URL、数据库配置等信息正确
内容的提问来源于stack exchange,提问作者ankit microlent
相关产品推荐
相关产品推荐

