php - Wordpress - 如何使 URL 返回具有自定义内容类型的动态 JSON?
问题描述
首先是一些背景,我正在尝试按照这里的说明进行操作:
获得适用于我的 iOS 设备网站的通用链接。我的 wordpress 站点处于共享托管环境中,因此我无权访问服务器或任何根文件。我将文件放在我网站的根目录(httpdocs),当我导航到该页面时它没有加载。在谷歌搜索中,我发现了一个 stackoverflow 帖子,指出您必须配置服务器以让它知道以“application/pkcs7-mime”的内容类型提供该文件(使用 wordpress 配置 apple-app-site-association 文件) . 如前所述,我无权访问它。
我有一个子域,它是一个我非常熟悉的 microsoft web api 项目。我为“apple-app-site-association”创建了一个端点,并在代码中动态构建了 json 响应并设置了内容类型并返回了它。这最终奏效了,Apple 检测到它和一切。这很有趣,因为我不需要服务器上的文件,因为我动态生成它,而且我不需要更改任何服务器方面的内容。
然而问题是我需要将主站点域作为通用链接,而不是 Windows 子域。主站点是wordpress。我在想是否有可能在 wordpress 中做同样的事情,我导航到 mydomain.com/apple-app-site-association 并即时生成 json 和 content-type 并提供服务。
我从来没有用 wordpress 做过任何编码,甚至不知道从哪里开始。
如果可能的话,我希望在以下方面有明确的方向:
使 mydomain.com/apple-app-site-association 指向提供 json 的自定义函数或页面。拥有使 json 动态提供的代码。具有将响应的内容类型设置为“application/pkcs7-mime”的代码。当然,如果有人知道如何在没有这种方法的情况下解决没有共享服务器的文件,我也对此持开放态度。据我所知,这可能是假设可以做到这一点的唯一方法。
解决方案
注意:我假设 WordPress 安装在根文件夹中。
因此,如果您想提供这样http://example.com/apple-app-site-association
的 JSON 内容并将内容类型(标头)设置为,您可以选择以下选项:Content-Type
application/pkcs7-mime
动态内容
因为您使用的是 WordPress,所以这可能是比手动编辑.htaccess
文件更好的选择。
您可以使用parse_request
挂钩;这样,您不需要任何自定义(WordPress)重写规则,不需要自定义页面(帖子类型page
),也不需要创建任何 JSON 文件。
并确保apple-app-site-association
根文件夹中没有命名文件,或者 WordPress 页面没有 slug apple-app-site-association
。
所以这将进入您的主题函数文件(例如wp-content/themes/your-theme/functions.php
):
<?php
add_action( 'parse_request', 'serve_apple_app_site_association', 0 );
function serve_apple_app_site_association( $wp ) {
// Check if the request is /apple-app-site-association
if ( 'apple-app-site-association' !== $wp->request ) {
return;
}
// Array version of the JSON data.
$data = array(
'applinks' => array(
'apps' => array(),
'details' => array(
array(
'appID' => '9JA89QQLNQ.com.apple.wwdc',
'paths' => array(
'/wwdc/news/',
'/videos/wwdc/2015/*',
),
),
array(
'appID' => 'ABCD1234.com.apple.wwdc',
'paths' => array(
'*',
),
),
),
),
);
// Send headers.
status_header( 200 );
nocache_headers();
header( 'Content-Type: application/pkcs7-mime' );
// And serve the JSON data.
echo wp_json_encode( $data );
exit;
}
静态内容
将 JSON 数据放在一个名为
apple-app-site-association
(即无扩展名)的文件中,并将文件保存在您可以看到wp-config.php
和.htaccess
文件的根文件夹中。将此添加到您的
.htaccess
文件中:
<Files apple-app-site-association>
Header set Content-Type application/pkcs7-mime
</Files>
如果<Files>
和/或Header
不/不适合你,那么你可以只使用上面的第一个选项,但使用类似readfile()
读取静态文件的东西。
或者(特别是如果 URL 重写在您的站点上不可用/不支持),您可以创建一个以apple-app-site-association
根文件夹命名的文件夹并添加index.php
到该文件夹和该文件中:
<?php
header( 'Content-Type: application/pkcs7-mime' );
// Read the static file or just generate a dynamic content.
@readfile( __DIR__ . '/apple-app-site-association.json' );
exit;
推荐阅读
- javascript - Prettier 没有出现在 VS Code 的状态栏上,用于服务器上的缩小文件
- php - nginx:如何服务 /index.php 的子文件夹?
- java - JavaFX - 更改 ListView 的 FocusModel
- python - 计算嵌套列表中特定元素的深度
- node.js - 如何在 Jest 中查看堆栈跟踪/错误原因?
- python-3.6 - 无论我输入什么罗马数字,此代码都会产生“0”作为值。为什么会这样?
- laravel - 如何安装低版本的laravel?
- python - 无法安装 python-pip 模块
- bash - 如何将 perl 命令中的变量用于 bash 脚本
- javascript - 如何选择html元素的兄弟节点?