【问题标题】:How to run Magento 2 from a subdirectory如何从子目录运行 Magento 2
【发布时间】:2016-11-25 07:45:32
【问题描述】:

我正在尝试设置一个 Magento 2 站点,该站点将以 http://www.example.com/store/ 作为其主页运行,但 Magento 的路由器将该子目录路径视为前端模块名称,并尝试运行一个名为 store 的模块不存在的。

我的基本 URL 是这样配置的:

mysql> select * from core_config_data where path like '%url';
+-----------+---------+----------+-----------------------+-------------------------------+
| config_id | scope   | scope_id | path                  | value                         |
+-----------+---------+----------+-----------------------+-------------------------------+
|         2 | default |        0 | web/unsecure/base_url | http://www.example.com/store/ |
|         3 | default |        0 | web/secure/base_url   | http://www.example.com/store/ |
+-----------+---------+----------+-----------------------+---------- --------------------+

通过此设置,我更新了 Nginx 配置,将 location 声明更改为在开头包含 /store。完成此操作后,我就可以访问该站点并且静态资源正在正确加载,但是我尝试访问的任何页面都会导致 Magento 的花哨的 404 页面。

由于我知道该请求正在进入 Mageto 应用程序,因此我有一种预感,即 Magento 的路由会导致问题。为了测试,我在/app/code/MyModules/Store/Controllers/Index/Index.php 创建了一个带有简单控制器的新模块,并给它一个frontName 为store 的路由器。激活该模块并重新加载页面后,我得到的不是 404,而是我在自定义控制器中设置的简单 JSON 输出。所以我知道 Magento 正在获取请求,并认为作为其基本 URL 一部分的初始子目录实际上是 frontName 路由。

所以此时我有两个问题:

  1. 是否可以在这样的子目录中运行 Magento 2 商店,还是我必须求助于使用子域?
  2. 假设 1 的答案是“是的,有可能”,那么我缺少什么来完成这项工作?我觉得某处必须有一些设置可以解决此问题,但我根本不知道该往哪里看。

【问题讨论】:

  • 提醒一下,我的答案尚未经过 NGINX 服务器测试,但根据我的 Magento 经验,它应该仍然有效。
  • 我写了一篇关于这个jokiruiz.com/magento-2/how-to-run-magento-2-from-a-subdirectory的帖子,希望对您有所帮助。它只是在 /pub/ 文件夹中创建文件夹,因为一切都在那里。

标签: php magento nginx magento2


【解决方案1】:

我建议您在Magento Stack Exchange 上提问,看看如果以下方法不起作用,您能否获得更多帮助。

我的经历
你的问题的简短回答是肯定的。 Magento 2 可以很好地处理子目录。实际上,我只是将我们的网站从子目录 /store 中删除,然后又回到没有。好吧,添加子目录和删除子目录是两件不同的事情,我仍然遇到与您所遇到的问题类似的问题。这是我为调试/修复问题所做的:

  1. 从仪表板检查您的配置设置,看看它是否确实在提取正确的 web/unsecure/base_url 和 web/secure/base_url,这位于 Stores > Configuration > Web 下。听起来是这样,但如果不是先调试并修复它。
  2. 通过您的托管终端或通过 SSH 完全删除(删除)var/di 目录和 var/view_processed 目录。
  3. 再次通过您的主机终端或通过 SSH 运行以下命令,假设您位于 Magento 安装的根目录中。你可能需要也可能不需要 php 部分,我确实添加了额外的命令,因为我不知道你到目前为止做了什么。这些都不应该伤害任何东西。

php bin/magento 缓存:刷新
php bin/magento 设置:升级
php bin/magento setup:di:compile
php bin/magento 设置:静态内容:部署
php bin/magento 索引器:重新索引

您可能需要通过在系统 > 缓存管理下的管理仪表板中手动运行整页缓存来遵循此操作。之后,请确保在您第一次检查网站前端时按 F5,这样您的浏览器就会刷新自己的网站缓存,现在一切都应该正常工作了。

主要问题
Magento 2 做了一些了不起的事情来改善用户体验和加快页面加载时间。其中之一是缓存的改进,如您所见,这会给开发人员带来很多问题。如有疑问,只需使用我发布的命令刷新所有内容,通常可以解决很多问题。

更新
抱歉刚刚意识到你确实在Magento Stack Exchange 上问过。我应该提到的一件事是我没有只是将 index.php 和 .htaccess 文件复制到 /store 目录。在做我提到的任何事情之前,我实际上将整个 Magento 安装移动到 /store 目录中。然后当我不再需要 /store 时,我将所有东西都移出并按照我提到的步骤操作。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 2014-09-06
    • 2023-01-30
    • 2017-08-11
    • 2020-02-04
    • 2021-12-03
    • 2014-12-07
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多