Azure和CakePHP 3在子目录中

时间:2017-06-26 21:15:43

标签: php azure web-config azure-web-sites cakephp-3.x

  1. 我的第一个问题是我无法在Azure的子目录hosten中使CakePHP 3正常工作(所以我必须使用web.config来重写规则)
  2. 我想配置我的顶级web.config,以便在root上拥有其他php文件,并且还有一些重写规则。
  3. 我想要实现的结构:

    -file1.php

    -file2.php

    -folder / file3.php

    -index.php

    - / dashboard /目录包含cakePHP 3

    例如,我的域名为https://mydomain.azurewebsites.net

    我需要写https://mydomain.azurewebsites.net/dashboard来做与cakePHP有关的任何事情。如果我写https://mydomain.azurewebsites.net/dashboard/users/list我正在导航到模板视图" list" in"用户"控制器。 我在/仪表板之前写的任何其他东西我都不会将PHP作为控制器或类似物来处理。

    现状

    如果我转到https://mydomain.azurewebsites.net/dashboard/users/list页面已正确加载但是因为我正在加载文件中的资源,请立即写信:

    <link href="/webroot/backend/pages.css" rel="stylesheet" type="text/css"> 
    

    资源正在尝试从https://mydomain.azurewebsites.net/webroot/backend/pages.css加载但不是 https://mydomain.azurewebsites.net/dashboard/webroot/backend/pages.css

    解决方案我发现我不认为好

    定义

    <?php 
    use Cake\Routing\Router;
    $path = Router::url('/', true); 
    ?>
    

    并在资源声明前使用$ path。这意味着我必须更改我的所有项目以包含此$ path。

    使用重写规则的

    任何帮助或者在Azure的子目录中托管cakePHP 3的其他任何人?

1 个答案:

答案 0 :(得分:1)

您可以将web.config文件添加到Azure网站的根目录,默认情况下为:D:\home\site\wwwroot。并添加重写配置设置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Rewrite to dashboard" stopProcessing="true">
                    <match url="^webroot/backend/(.*)$" />
                    <action type="Rewrite" url="dashboard/webroot/backend/{R:1}"
                      appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

通过此文件,任何资源请求如:

https://mydomain.azurewebsites.net/webroot/backend/pages.css

将被重定向到:

https://mydomain.azurewebsites.net/dashboard/webroot/backend/pages.css