首页 > 解决方案 > Yii2 框架到 Azure Web 应用程序(404 页面未找到)

问题描述

感谢您阅读我的帖子。

我在使我的网站应用程序 (Yii2) 在 Azure Web 应用程序中正常工作时遇到问题。我已将 Yii2 网站从现有服务器迁移到 Azure Web 应用程序。经过下面列出的大量操作,我能够访问该网站。

主题加载成功,但抛出“404 页面未找到请求的页面丢失,或地址已更改”正文中的错误,“菜单栏”中的其他链接也不起作用。“您要查找的资源已被删除、更改名称或暂时不可用。”

Azure 资源配置如下:

应用服务应用设置:

迁移步骤:

  1. 将现有服务器中的所有文件/文件夹通过 FTP 传输htdocs到我的应用服务计划 ( \site/wwwroot)
  2. 在 PhpAdmin 中生成 SQL 表创建
  3. ENGINE=InnoDB DEFAULT CHARSET=utf8;在脚本中查找和替换
  4. 连接到 Azure Database for MySQL 服务器,创建新架构并运行脚本
  5. 在 Azure 中,KUDU Inferface 浏览 (\site\wwwroot\config) 并将 db.php 更改为

    <?php
    
    return [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=xxxx.mysql.database.azure.com;dbname=xxxxx',
        'username' => 'xxxxxxx@xxxxxxxxxxxxxxxxxx',
        'password' => 'xxxxxx',
        'charset' => 'utf8',
    ];
    
  6. 重新启动 Web 应用程序
  7. 检查https://yourdomain.com/requirements.php(通过没有任何错误)
  8. 尝试浏览新的 Web 应用程序时,“您要查找的资源已被删除、名称已更改或暂时不可用”。
  9. KUDO PowerShell 窗口浏览site/wwwroot并执行以下代码行
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php composer-setup.php
    php composer.phar global require "fxp/composer-asset-plugin:^1.2.0"
    
  10. 浏览到目录 (\site\wwwroot\web) 并使用以下代码行更改 index.php:

    if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
        if(!headers_sent()) {
            header("Status: 301 Moved Permanently");
            header(sprintf(
                'Location: https://%s%s',
                $_SERVER['HTTP_HOST'],
                $_SERVER['REQUEST_URI']
            ));
            exit();
        }
    }
    // comment out the following two lines when deployed to production
    ('YII_DEBUG') or define('YII_DEBUG', false);
    defined('YII_ENV') or define('YII_ENV', 'prod');
    
    require(__DIR__ . '/../vendor/autoload.php');
    require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
    
    $config = require(__DIR__ . '/../config/web.php');
    
    (new yii\web\Application($config))->run();
    
  11. 在 Azure 门户/Web 应用程序/应用程序设置中,将默认目录从 site\wwwroot 更改为 site\wwwroot\web
  12. 重新启动 Web 应用程序。

他们现在可以成功加载主页,但正文中出现 404 错误,并且“您要查找的资源已被删除、名称已更改或暂时不可用”。尝试访问页眉中的其他页面时。

我还注意到我的 \site\wwwroot 中有 2 个 .htacss 文件 1x 和我的 \site\wwwroot\web 中有 1x 尝试删除它们并在 (site\wwwroot\web) 中配置 web.config 文件但仍然无法正常工作.

<configuration>
  <system.webServer>  
    <rewrite>  
        <rules>  
          <rule name="Redirect rquests to default azure websites domain" stopProcessing="true">
            <match url="(.*)" />  
            <conditions logicalGrouping="MatchAny">
              <add input="{HTTP_HOST}" pattern="^yoursite\.azurewebsites\.net$" />
            </conditions>
            <action type="Redirect" url="https://mysitename.azurewebsites.net/{R:0}" />  
          </rule>  
        </rules>  
    </rewrite>  
  </system.webServer>  
</configuration>

由于 Yii2 在 Azure Web App 中并不出名,因此在任何地方都找不到解决方案。如果您能提供帮助,将不胜感激。

标签: azureyii2azure-web-app-service

解决方案


推荐阅读