如何将根文件夹作为子文件夹重定向到站点?

时间:2018-12-24 14:31:28

标签: wordpress reactjs rest api virtualhost

我正在尝试使用React实现Wordpress REST API。现代惯例似乎是将API设置为域的子文件夹,即

https://sitename.com/api/v1

I want to be able to go to 
https://sitename.com/api/v1/wp-admin

And be able to sign into wordpress and have it so the REST api is accessed like:

https://sitename.com/api/v1/wp-json/wp/v2/pages

我有这个文件结构:

api/内部是wordpress安装。如果我将api包含在公用文件夹中,并指向带有虚拟主机的build文件夹,则它会按预期运行,除了以下事实外:在我构建React应用时,它会清除Wordpress安装并重新启动整个过程。

我尝试将虚拟主机设置为子文件夹,但它仍返回404。

编辑:要获得此运行的简单实例:

yarn create-react-app dir_name
cd dir_name
mkdir api
cd api
wp core download
# Add virtual host
# Generate SSL Cert

2 个答案:

答案 0 :(得分:0)

我相信,如果您将WordPress安装在/ api子文件夹中,则该文件夹被视为WP实例的根目录,因此不会在REST API端点中添加任何前缀。

要实现此目的,您应该使用“ rest_url_prefix”过滤器。像这样:

add_filter( 'rest_url_prefix', 'change_api_slug');
function change_api_slug( $slug ) {

    return 'api';

}

这是一篇非常不错的文章:https://buddydev.com/modifying-api-base-url-prefix-for-wp-rest-api-plugin/

希望它会有所帮助:)

答案 1 :(得分:0)

我想出的最好办法是将符号链接附加到api/目录,并将其链接到build/目录。

# Source->Destination
ln -s /var/www/site.com/public/api /var/www/site.com/build/

根据您的配置,一旦您对服务器执行api/的访问权限以访问Wordpress(例如添加插件),则可能必须更改yarn build组。

快速浏览:

ln -s /var/www/site.com/api /var/www/site.com/public/
yarn build/
sudo chown -R :www-data build/

编辑:我最近采用了使用apache虚拟主机的感觉更好的方法。

首先,我将根目录分为frontendbackend目录。内部前端是create-react-app的输出。 backend内是api/wp。我将Wordpress嵌套在一个api目录中,以防该项目进行扩展并包含多个api,它们都将被组合在一个地方。

这是目录结构

在后端.htaccess内部,是重定向到wordpress安装

RewriteEngine On
RewriteBase /api
RewriteCond %{REQUEST_URI} !^/api/wp
RewriteRule (.*) wp/$1 [R=302,L]

内部wordpress是我制作的一个空白主题,它重定向到react应用程序的URL,在本例中为isma.test。