
firebase hosting提供了一个名为cleanurls的配置选项,其主要目的是为了美化url,自动移除.html文件的扩展名。当此选项设置为true时,例如,访问https://example.com/contact.html将自动显示为https://example.com/contact。这是firebase hosting针对静态html内容设计的功能,旨在提供更简洁的用户体验。
在firebase.json中启用此功能的示例如下:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"trailingSlash": true
}
}需要强调的是,cleanUrls功能是硬编码(by design)仅针对.html文件生效的。它不会自动识别并移除.php、.asp、.jsp或其他任何非.html文件的扩展名。
Firebase Hosting是一个静态内容托管服务。这意味着它主要用于托管HTML、CSS、JavaScript、图片等静态资源。Firebase Hosting不具备执行PHP代码的能力。 当您将一个.php文件部署到Firebase Hosting时,它会被视为一个普通的静态文件。
这意味着:
立即学习“PHP免费学习笔记(深入)”;
用户在firebase.json中配置的以下headers规则,正是为了强制.php文件以HTML的形式呈现:
"headers": [ {
"source": "*.php",
"headers": [ {
"key": "Content-Type",
"value": "text/html"
} ]
} ]此配置使得浏览器在请求*.php文件时,会将其内容解释为HTML,而不是尝试执行PHP脚本。然而,这并不能改变Firebase Hosting不执行PHP代码的本质。
鉴于上述特性,移除.php扩展名并使其像cleanUrls一样工作的解决方案取决于您的.php文件是否真的包含PHP代码。
如果您的.php文件实际上不包含任何需要PHP解释器执行的代码,例如它只是一个静态的HTML文件,但错误地使用了.php扩展名,那么解决方案非常简单:
将您的.php文件重命名为.html。
例如,将contact.php重命名为contact.html。一旦文件扩展名变为.html,并且您的firebase.json中已设置"cleanUrls": true,Firebase Hosting将自动为您处理URL重写,使https://google.com/contact.html能够通过https://google.com/contact访问。
如果您的.php文件确实包含需要PHP解释器执行的动态代码,那么Firebase Hosting本身无法直接满足您的需求。在这种情况下,您需要采取以下策略:
使用后端服务: 将PHP代码部署到一个支持PHP运行时的后端服务。这可以是:
Firebase Hosting作为前端代理: 配置Firebase Hosting的rewrites规则,将特定路径的请求代理到您的后端服务。例如:
{
"hosting": {
"public": "public",
"rewrites": [
{
"source": "/api/**",
"destination": "https://your-cloud-run-service.run.app/api"
},
{
"source": "/contact",
"destination": "https://your-php-backend-url.com/contact.php"
}
]
}
}通过这种方式,当用户访问https://google.com/contact时,Firebase Hosting会将其请求转发到您的PHP后端,然后将后端返回的内容呈现给用户。
用户提供的firebase.json中包含一个rewrites规则:
"rewrites": [
{
"source": "**/!(*.css|*.js|*.map|*.jpg|*.gif|*.png|*.php),/post/**",
"dynamicLinks": true
}
]此规则的source属性实际上包含两个以逗号分隔的模式:
这两个模式组合在一起,意味着任何匹配其中之一的请求都将触发此重写规则(此处配置为dynamicLinks: true,用于Firebase动态链接,但通常重写规则会指定一个destination)。
关于合并规则的疑问: 将多个源模式用逗号分隔在一个source字段中是Firebase Hosting支持的写法,表示只要匹配其中任何一个模式,就应用该重写规则。如果这些模式都指向相同的重写目标(例如,都是为了处理动态链接,或者都重写到同一个后端服务),那么合并它们是完全可行的,并且可以使配置更简洁。
然而,需要明确的是,rewrites规则与cleanUrls是两种不同的机制。 rewrites主要用于路径重定向、URL重写或代理到后端服务,它不会自动移除文件扩展名。移除.html扩展名是cleanUrls的特定功能。用户试图通过rewrites规则来移除.php扩展名是行不通的,因为cleanUrls不识别.php。
通过正确理解Firebase Hosting的能力和限制,您可以为您的Web应用选择最合适的架构和配置方案。
以上就是Firebase Hosting中移除.php扩展名的实践指南的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号