iis 当Azure应用程序服务的默认文档存在于子目录中时,如何设置该文档?

n7taea2i  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(146)

我正在通过配置为在我的生成代理上执行Azure应用服务部署任务的发布管道从Azure DevOps部署Azure应用服务。部署任务的目标是我的应用服务的根,因此它将部署在我的“\site\wwwroot\”文件夹中。

我的项目是一个Laravel PHP Web应用程序,因此默认文档被设置为“index.php”。我的应用程序被部署到“\site\wwwroot\”,但设置为默认文档的“index.php”文件的位置却在“\site\wwwroot\”中。

这不是一个大问题,对吧?只要将应用程序目录设置为'\site\wwwroot\public',应用程序就可以工作了,因为它现在可以找到我的默认文档(index.php)。
当Azure DevOps部署到Azure应用程序服务时,它将部署到您在Azure中设置的应用程序目录。由于我的根目录现在设置为“\site\wwwroot\public”以更正查找默认文档的问题,因此AzureDevops将后续生成部署到“\site\wwwroot\public”文件夹。
理想情况下,我希望将“index.php”文件保留在"\site\wwwroot\public“文件夹中,因为当我将其移动到项目的根目录时会出现问题。我似乎不知道如何让Azure在我的公共文件夹中查找默认文档。我是否需要编写一个web.config并将其放置在我的项目根目录中,以便IIS找到它?
更新:
我仍在尝试解决我遇到的这个问题。我无法配置Azure或Azure DevOps来区分我的应用部署到的目录和我的应用提供服务的目录。
我无法简单地创建两个虚拟应用程序,因为这会将我的根目录暴露给该端点。我需要能够简单地指示Azure DevOps将我的应用程序放置在Web应用程序上的何处。

46scxncf

46scxncf1#

由于在将应用程序目录设置为'\site\wwwroot\public'后工作正常,因此您可以添加一个具有'site\wwwroot\public'物理路径的新虚拟应用程序,而不必更改原来的虚拟应用程序。
然后,有两个项目,例如:

关于通过Azure DevOps部署,只需将应用部署到该应用服务(site\wwwroot)即可。
之后,您可以通过[app service url]\PHP访问您的应用。

zkure5ic

zkure5ic2#

通过为Azure应用程序服务提供Kudu环境变量,你可以指定从Azure DevOps(或Git、BitBucket等)部署源代码的位置。请参阅在Azure门户的“应用程序设置”部分中为我的Azure应用程序服务配置的以下环境变量。

这允许我指示代码部署的位置。否则,Kudu的默认源代码管理路径似乎是从您的虚拟应用程序路径中获取的。
进一步阅读:https://github.com/projectkudu/kudu/wiki/Deploying-inplace-and-without-repository
更新:
虽然您可以使用Kudu环境变量配置代码的部署位置,但您仍然受限于虚拟应用程序的文件夹名称。
例如,如果我将SCM_TARGET_PATH设置为\home\sites\app,并且我有一个虚拟应用程序,其虚拟路径为/,物理路径为\home\sites\app\public,则Azure DevOps会将您的代码部署到\home\sites\app\public,而不是预期的\home\sites\app
这是一个巨大的不便,我不能托管我的Laravel应用程序,因为我的连续部署将不会工作的方式Azure目前的工作。我将不得不发布我的代码到Docker容器,并使用它代替(我不想这样做)。

kq0g1dla

kq0g1dla3#

  • 将server.php重命名为index.php
  • 将.htaccess从公用文件夹复制到根文件夹
  • 更改.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]

将function /Illuminate/Foundation/helps.php/asset()函数更改为如下所示:

function asset($path, $secure = null)
{
    return app('url')->asset("public/".$path, $secure);
}

相关问题