Azure IIS部署Symfony4项目:web.config重写规则需求
解决Azure IIS下Symfony4的URL重写问题
我完全懂你现在的困扰——IIS不支持Apache的.htaccess文件,所以Symfony默认的URL美化规则没法生效,导致必须手动加/index.php才能访问。别担心,下面这个专门适配Symfony的web.config配置应该能解决你的问题,把它放到你设置的根目录(也就是site\wwwroot\testproject\public)下就行:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <!-- 强制所有请求通过index.php处理,实现Symfony的URL重写 --> <rule name="Symfony Routes" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" /> </rule> </rules> </rewrite> <!-- 禁止直接访问敏感文件,提升安全性 --> <security> <requestFiltering> <hiddenSegments> <add segment=".env" /> <add segment="composer.json" /> <add segment="composer.lock" /> <add segment="vendor" /> <add segment="var" /> </hiddenSegments> </requestFiltering> </security> <!-- 确保静态文件直接返回,不经过PHP处理 --> <handlers> <remove name="PHP_via_FastCGI" /> <add name="PHP_via_FastCGI" path="*.php" verb="GET,HEAD,POST" modules="FastCgiModule" scriptProcessor="%PHP_FCGI_PATH%" resourceType="Either" requireAccess="Script" /> </handlers> </system.webServer> </configuration>
关键说明:
- 核心的重写规则会检查请求的不是文件或目录时,自动把请求转发到
index.php,这样就不用手动在URL里加它了。 - 安全部分禁止了直接访问Symfony的敏感文件和目录,避免泄露配置信息。
- 处理器配置确保静态文件(比如CSS、JS、图片)直接由IIS返回,不经过PHP,提升性能。
额外检查:
- 确认Azure App Service已经启用了URL重写模块——大部分情况下默认是开启的,如果没开,可以在Azure门户的应用服务"扩展"里搜索安装URL Rewrite。
- 再核对一下应用设置里的"虚拟应用程序和目录",确保根目录确实指向了
site\wwwroot\testproject\public,路径不要写错。
替换完web.config后,重启一下你的Azure应用服务,再直接访问根URL应该就能正常跳转了!
内容的提问来源于stack exchange,提问作者Rubén M
相关产品推荐
相关产品推荐

