apachewordpress网站后面的node.js应用程序端点



我有一个在共享托管服务器上运行的WordPress网站(mywebsite.com(。与此同时,我制作了一个node.js应用程序,在3000端口的后端运行,该应用程序已被编程为具有不同的API端点。

我希望端点与特定URL中的网站位于同一域中。

已经在node.js选择器环境中声明的主端点工作得很好。让我们称之为mywebsite.com/myapp。其他端点(已在express routes中声明(在网站环境之外正常工作,但如果我试图在同一域上访问它们,即使是作为sub-uri,也会被apache/wordpress捕获。

例如,如果我尝试访问mywebsite.com/secondendpointmywebsite.com/myapp/thirdendpoint,则加载404页面的Wordpress会捕获该请求。

现在,我明白了,我必须指示apache服务器将请求重定向到上面提到的node.js应用程序的URL。只要我不能访问apache服务器,我唯一的选择就是调整.htaccess文件。

当我创建node.js应用程序时,虚拟环境已通过我的网站公用文件夹中自己的子文件夹中的.htaccess文件自动设置,我的整个网站位于:/public_html/myapp。它使用Phusion Passenger来处理应用程序运行的虚拟环境。

# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
PassengerAppRoot "/home/user/apps/myapp"
PassengerBaseURI "/myapp"
PassengerNodejs "/home/user/nodevenv/apps/myapp/12/bin/node"
PassengerAppType node
PassengerStartupFile app.js
PassengerAppLogFile "/home/user/logs/myapp.log"
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END

上面的代码运行得很好。我试着按照一些教程中的建议添加一个别名:

# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION BEGIN
<IfModule Litespeed>
SetEnv Alias /secondendpoint /apps/secondendpoint
</IfModule>
# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION END

在/public_html/的根目录中,我有以下.htaccess文件

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^/secondendpoint/(.*)?$ http://127.0.0.1:3000/secondendpoint/$1 [P,L]
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

无论我尝试什么,当我尝试访问我的网站.com/secondedendpoint时,我总是会收到Wordpress 404消息。

我做错了什么?

我甚至试图在/public_html/secondpendpoint中创建一个子文件夹,它实际上代理了流量,但我觉得这不是正确的方法

因此,经过一周的尝试,我发现RewriteRule的语法确实错误。

RewriteRule ^/secondendpoint/(.*)?$ http://127.0.0.1:3000/secondendpoint/$1 [P,L]

正确的语法是

RewriteRule ^secondendpoint(.*)$ http://127.0.0.1:3000/secondendpoint/$1 [P,L]

如.htaccess文件"的注释中所示;应该仅通过WordPress过滤器进行修改";。事实上,is在每次更新时都会自动覆盖我编写的规则。

正确的方法是调整内部WordPress WP_Rewrite我仍在努力理解。

我最大的尝试是在主题的functions.php中添加以下行:

function wpd_wtf_rewrite_rule() {
add_rewrite_rule(
'secondendpoint(.*)$',
'http://127.0.0.1:3000/secondendpoint$1',
'top'
);
}
add_action( 'init', 'wpd_wtf_rewrite_rule' ); 

这些行正在中翻译

RewriteRule ^secondendpoint(.*)$ /http://127.0.0.1:3000/secondendpoint$1 [QSA,L]

并更新到.htaccess文件中。

目标前面的斜线是一个我不知道如何解决的问题。但是,生成的.htaccess字符串不会代理导致API错误的请求。

最新更新