4d-database - 无法使用 4D 更改默认主页
问题描述
我正在尝试按照本教程从 4d 服务器网络开始。 http://doc.4d.com/4Dv16/4D/16/Serveur-Web.200-3246839.fe.html
我禁用了默认主页index.html(甚至删除了WebFolder文件夹中的实际文件),然后在 On Web Connection 方法中添加了这几行
C_TEXT($1)
Case of
:($1="/")
WEB SEND FILE("new_index.html")
End case
但是当我转到localhost:8080/时,我仍然得到 4d 默认页面, 然后我发现该方法甚至没有被调用,除非我在 url 中添加一些东西(比如 localhost:8080/something)
解决方案
如果您在数据库设置中将 index.html 列为默认主页,那么它将加载该页面(有时如果它不存在,它会创建它)。
此外,使用 html 扩展名将不会运行任何动态代码,要调用代码,您必须使用s html 扩展名或文件必须不存在(未找到文件时触发 OWA/OWC)。
此技术提示仍然适用,并很好地概述了 Web 连接(和 Web 身份验证)方法在什么情况下运行:
技术提示:如何跳过 HTTP 并重定向到 HTTPS:第 2 部分(Web 诱饵文件夹)
引用:
On Web Authentication 数据库方法(默认情况下)仅在以下情况下调用:
- 当 4D 收到以 4DACTION/ 开头的 URL 时
- 当 4D 收到以 4DMETHOD/ 开头的 URL 时
- 当 4D 收到以 4DCGI/ 开头的 URL 时
- 当 4D 收到请求不存在的静态页面的 URL 时
- 当 4D 处理半动态页面中的 4DSCRIPT 标签时
- 当 4D 基于半动态页面中的方法处理 4DLOOP 标签时。
注意:On Web Authentication 数据库方法期望在 $0 中返回布尔值;True = 接受请求,False = 拒绝请求。如果不返回 $0,则默认值为 True,这意味着所有请求都被接受。
在以下情况下(默认情况下)调用 On Web Connection 数据库方法:
当将浏览器连接到在上下文模式下运行的 4D Web 服务器时。使用 /... URL 调用数据库方法。
- 当 4D 收到 /4DMETHOD URL 时。Web 服务器切换到上下文模式,并使用 $1 中的 /4DMETHOD/MethodName URL 调用数据库方法。
当 4D 收到 /4DCGI URL 时。使用 $1 中的 /4DCGI/ URL 调用数据库方法。- 当使用未找到的 / 类型的 URL 调用网页时。使用 URL 作为 $1 调用数据库方法。
- 当使用 / 类型的 URL 调用网页时,默认情况下没有定义主页。使用 URL 作为 $1 调用数据库方法。
因此(默认情况下)如果 Web 访问者正在请求一个页面,并且该页面存在于 URL 中指定位置的 web 文件夹中,则该页面将自动发送回客户,无需任何特殊处理。这在大多数情况下都很好,但开发人员可以通过实现 web 诱饵文件夹来更好地控制请求。
因此,如果您希望 / url 运行您的代码,您可以使用以下任一方法:
- 使用 index.shtml(注意 shtml 中的s)
- 删除数据库设置中的条目(因此默认页面字段为空)
在 4D 中修改 Web 配置选项时,用户设置将优先于数据库设置。
如果启用了用户设置,请确保同时检查用户设置和数据库设置。
可通过以下菜单选项访问用户设置:
或者
推荐阅读
- java - 在我的情况下如何进行搜索视图?安卓工作室
- c# - 如何将过滤后的数据从 DataGridView 显示到 StimulReport 中?
- sql - 有没有办法更新证书而无需更改 SQL Server 配置管理器中的证书(的指纹)?
- prolog - 执行所有子句并删除一些子句
- java - art::OatHeader::IsDebuggable() const 崩溃,Android 11,Google Ads SDK 19.7.0
- python - 遍历 CSV 时跳过 For 循环
- java - Docker Image 和 Java HTTP Post 请求
- python-3.x - 熊猫计算重复条目
- python - pygame.key.get_pressed() 和 event.type 有什么区别?
- javascript - 未捕获的 TypeError:timer.getTime 不是更新时的函数