如何使用 .htaccess 在具有相同域的一台服务器上混合节点和 PHP 应用程序?

问题描述 投票:0回答:1

我有一个使用 OpenCart 的 PHP 应用程序,但我想将某些页面作为 Nuxt 应用程序提供服务。我想将 Nuxt 应用程序保留在单独的目录中,但仅为某些 URL 提供服务,并让 OpenCart 为其他 URL 提供服务。

例如我想要:

domain.com/anvils 由 OpenCart 提供服务

domain.com/acme 将由 Nuxt 提供服务

我希望所有Nuxt文件都存储在/public_html/nuxt/中。 OpenCart 提供来自 /public_html/ 的文件。但我不希望 /nuxt/ 文件夹成为 URL 的一部分,它只是为了我自己的组织。我希望能够使用 .htaccess 将我选择的 URL 重定向到 Nuxt 应用程序并让它执行路由。

目前我的 .htaccess 有这个:

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

如何将我想要的 URL 指向 Nuxt 应用程序?

php node.js apache .htaccess nuxt.js
1个回答
0
投票

我想说,将该 OpenCart 解决方案的实现移至 Nuxt 应用程序文件夹旁边的自己的文件夹中是有意义的。这将使两者之间的分离更加清晰。特别是,这意味着两种解决方案的重写配置将与初始分离规则分开。

在该设置中,您可以简单地在 http 服务器的中央(虚拟)主机配置中使用两个

Alias
指令:

Alias /anvils /public_html/opencart
Alias /acme /public_html/nuxt

OpenCard 解决方案的现有文件必须移至“opencart”文件夹(或者您想要的名称)。我想说,“.htaccess”配置文件也需要到达那里,并且

RewriteBase
需要指向
/anvils
。不知道你的设置现在如何工作,我想说你目前在这个问题上自相矛盾,因为从你的问题中不清楚 OpenCart 解决方案是否位于路径
/
/anvils
下。

这显然只有在您实际控制主机配置的情况下才有可能,因此如果您自己操作http服务器。如果您使用廉价的托管提供商,这可能不适合您。


如果您想保持问题中所描绘的文件系统布局,那么单个

Alias
指令 可能 可以工作,但您必须对其进行测试:

Alias /acme /public_html/nuxt

该指令必须在配置中之前(因此更靠前)实现。同样,这必须位于中央主机配置中,这在“.htaccess”文件中是不可能的。


如果这两种方法都不可行,您确实必须依赖重写。所以对于你问的问题,这可能是一个起点:

我假设文件夹“public_html”是在 http 服务器的主机配置中配置为

DocumentRoot
的文件夹,无论该文件夹实际位于文件系统中的什么位置。可能类似于
/var/www/public_html
或类似的东西。我进一步假设您正在使用最新版本的 apache http 服务器。

RewriteEngine on
RewriteBase /

# Nuxt application
RewriteRule ^/?acme(.*)$ /nuxt$1 [L]

# OpenCart auto generated rule set
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

我不确定 OpenCart 解决方案如何处理对

/anvils
的请求。由于您当前的设置不包含任何处理痕迹,因此我将保持原样。你需要自己解决这个问题。

您需要注意此实现不会简单地被 OpenCart 解决方案覆盖,您提到它会自动生成您的“.htaccess”文件。


免责声明:请注意,我没有测试我在这里的建议。该建议肯定可能包含拼写错误或其他故障。我上面也说过,你必须测试这是否真的有效。您当然必须根据您的具体设置调整实施。这是对 SO 的回答的一般方面:我们不是来为您做工作的,我们是来帮助的,这意味着您需要了解我们提供的内容,而不是盲目复制一些行。您需要能够实际使用您想要使用的工具,包括测试、实验、调试和阅读文档,也许是一些教程。

© www.soinside.com 2019 - 2024. All rights reserved.