Laravel 9部署IIS出现500错误,php artisan serve可正常运行
Laravel 9部署到IIS解决500错误(FASTCGI_UNKNOWN_ERROR 0x8007010b)
修正站点根目录指向
IIS站点的物理路径必须指向Laravel项目的public目录,而非项目根目录。Laravel的入口文件是public/index.php,直接指向根目录会导致路径识别异常,触发0x8007010b错误。配置URL重写规则
- 先通过服务器管理器安装IIS的「URL重写」模块(Web服务器角色下的组件)。
- 在
public目录创建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> </system.webServer> </configuration>
该配置会将所有请求重定向到
index.php,匹配Laravel的路由机制,同时避免目录路径错误。验证PHP-FCGI配置
- 检查站点的处理程序映射,确认PHP的FastCGI应用程序池配置:
- 确保
PHP_FCGI_MAX_REQUESTS环境变量设置合理(建议设为1000)。 - 打开
php.ini,确认cgi.fix_pathinfo=1(PHP7+也可设为0,但需保证URL重写规则生效)。
- 确保
- 给IIS应用程序池身份(如
IIS AppPool\你的站点池名)赋予Laravel项目目录的读写权限,重点是storage和bootstrap/cache目录(这两个目录需要写入权限,否则会触发500错误)。
- 检查站点的处理程序映射,确认PHP的FastCGI应用程序池配置:
检查目录权限
右键storage、bootstrap/cache目录 → 属性 → 安全 → 编辑 → 添加 → 输入IIS AppPool\你的站点应用池名称,勾选「读取」和「写入」权限。同时确保public目录的读取权限正常。排查FastCGI路径问题
确认PHP可执行文件的路径无空格或特殊字符,若路径包含空格需用引号包裹(如"C:\Program Files\PHP\php-cgi.exe");站点物理路径必须使用绝对路径(如C:\inetpub\wwwroot\laravel-project\public),禁止使用相对路径。
内容的提问来源于stack exchange,提问作者ImageMagician
相关产品推荐
相关产品推荐

