我想要实现的结构:
-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的其他任何人?
答案 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