我正在尝试在azure devops中自动化php部署。
在现有环境中,应用程序服务具有指向site \ wwwroot \ public的虚拟路径:
部署时,所有数据都复制到此目录,而不是按预期复制到site \ wwwroot:
当我创建一个新的应用程序服务(虚拟路径的默认值设置为site \ wwwroot)时,所有内容都会部署到site \ wwwroot:
因此,我的测试表明,部署取决于Configuration -> Tab 'Path mappings' -> Virtual applications and directories
下的设置。
在我看来,这似乎是个错误,因为wwwroot应该始终如其名所示是根。
如果我尝试通过添加web.config来解决此问题,则无法进行重写,因为存在某种形式的相对依赖性。
<rule name="reroute to /public" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{PATH_INFO}" pattern="^/public/" negate="true" />
</conditions>
<action type="Rewrite" url="\public\{R:0}" />
</rule>
我可以看到登录页面,但是我既不能登录也无法打开任何其他链接的页面,因为php希望请求发生在@ domain.com / call上,但是重写将这些调用更改为@ domain.com / public / call,所以它们都失败了。
因此,唯一的解决方案似乎是将虚拟路径设置为site \ wwwroot \ public,以使页面正常工作。 如果我部署了,我会暂时将其更改为site \ wwwroot。我不喜欢这样,但这似乎是最干净的解决方案。
答案 0 :(得分:0)
问题修改后的答案
感谢分享这些详细信息。
根据第一个屏幕截图,您已将默认根路径设置为site\wwwroot\public
。这意味着无论您如何部署到所有应用程序,其根路径始终为site\wwwroot\public
。因此,您的实际部署路径仍为site\wwwroot\public
。
但是实际上,对于原始设置(此根路径配置没有任何更改),它是site\wwwroot
。
如果您未在Azure门户中修改物理路径值,则Azure app service deploy task
无法部署到路径site\wwwroot
。因为您已将自定义的根路径设置为site\wwwroot\public
。
此外,要使路径可扩展,为什么不将默认虚拟路径设置为site\wwwroot
,然后使用以下步骤之一将路径更改为site\wwwroot\public
?您知道,扩展路径很容易,但是很难缩短路径级别。
方法1扩展路径:
指定虚拟应用程序的值:
由于这是一个可选参数,因此如果您未指定其值,它将默认将Web应用程序部署到根路径。
方法2扩展路径:
另一种方法是使用文件夹进行部署。
public
该文件夹位于工件文件夹中,例如.../a/public
。$(Build.ArtifactStagingDirectory)
或Azuer应用服务部署任务的文件夹。现在,在部署任务成功之后,您将看到ZIP
文件位于App服务的public
文件夹中。