我有一个使用 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 应用程序?
我想说,将该 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 的回答的一般方面:我们不是来为您做工作的,我们是来帮助的,这意味着您需要了解我们提供的内容,而不是盲目复制一些行。您需要能够实际使用您想要使用的工具,包括测试、实验、调试和阅读文档,也许是一些教程。