Magento 2.3 - không tìm thấy trang chủ chuyển hướng đến trang 404


7

Trang chủ Magento 2.3 trả về lỗi 404 Trang không tìm thấy. Điều này chỉ xảy ra khi không đăng nhập . Sau khi đăng nhập, trang chủ hoạt động đúng. (Nó dường như hoạt động trong chế độ xem trên thiết bị di động ngay cả khi trả về 404 ở chế độ xem trên máy tính để bàn.)

Cũng sau đó cache:clean page_cache, trang chủ hoạt động đúng.

Có ai đã phải đối mặt với loại vấn đề này?


Bạn đã tìm thấy một nguyên nhân cho vấn đề này? Tôi cũng đang đối mặt với nó. Nó xảy ra ngẫu nhiên, không có bất kỳ bản ghi trống nào trong url_rewrites và trở lại bình thường sau khi xóa bộ đệm. Cảm ơn!
Robert Schmidt

Không, chúng tôi đã cố gắng theo dõi nó. Bạn có đối mặt từ bao nhiêu lần?
Công nghệ Emipro Pvt. Ltd.

Bạn không cần phải xóa tất cả bộ nhớ cache. Chúng tôi đã theo dõi rằng sau khi xóa bộ nhớ cache toàn trang, nó cũng hoạt động. php bin/magento cache:clean full_page
Công nghệ Emipro Pvt. Ltd.

Nó xảy ra hoàn toàn ngẫu nhiên, không có bất cứ điều gì đăng nhập. Tôi đã mở một vấn đề trên github, có lẽ bạn cũng có thể đăng thông tin đầu vào của mình ở đó: github.com/magento/magento2/issues/21703
Robert Schmidt

Chúng tôi có vấn đề tương tự trên magento 2.3.1 với trang chủ về cài đặt sạch với dữ liệu Luma Sample.
Serge Baranov

Câu trả lời:


5

Nhập vào cơ sở dữ liệu của bạn và chạy này:

SELECT * FROM `url_rewrite` WHERE request_path='';

Xóa các hàng và sau đó làm:

php bin/magento setup:upgrade
php bin/magento cache:flush
  • Vô hiệu hóa Page Cachevà xem nếu lỗi vẫn còn.

  • Kiểm tra nếu bạn có redis cache, và làm sạch nó.

  • Xem mẫu được chỉ định trong trang chủ, kiểm tra bảng điều khiển xem có lỗi nào không.

2
Chỉ sau khi dọn dẹp bộ đệm trang, trang chủ hoạt động. Nhưng chúng tôi không nhận được request_path trống.
Công nghệ Emipro Pvt. Ltd.

Cập nhật câu trả lời của tôi.
Ylgen Guxholli

Không thể tắt bộ đệm trang. trang web là trực tiếp.
Công nghệ Emipro Pvt. Ltd.

1
Trả lời câu trả lời của tôi.
Ylgen Guxholli

Bạn đã phải đối mặt với loại vấn đề này?
Công nghệ Emipro Pvt. Ltd.

4

Vấn đề tương tự trong trang web Magento 2.3.1 mới của tôi, trang web của tôi không có chỗ trống request_path.

Lý do được xây dựng trong bộ đệm trang không phân biệt các yêu cầu GET và HEAD và không lưu trữ riêng chúng. Sau các yêu cầu CHÍNH với phản hồi 404, trang chủ được lưu vào bộ đệm và sau đó, bất kỳ yêu cầu GET hợp lệ nào sẽ trả về 404 cho đến khi FPC được làm mới.

Quan chức này cho biết lỗi đã được sửa trong Magento 2.3.2 https://github.com/magento/magento2/issues/21299#issuecomment-485144642


2
Đây phải là câu trả lời được chấp nhận cho câu hỏi là khoảng 2,3 cụ thể. (Các câu trả lời khác về việc viết lại URL có thể gây ra cùng một triệu chứng, nhưng điều đó đúng với tất cả các phiên bản và không được giúp đỡ bằng cách xóa bộ nhớ cache.)
Scott Buchanan

3

Chúng tôi cũng gặp sự cố này trên 3 cài đặt riêng biệt của Magento 2.3, tất cả trên các máy chủ khác nhau.

Điều này chỉ xảy ra kể từ khi nâng cấp từ 2.2.6 và dường như xảy ra tại cùng một thời điểm mỗi ngày (không có lỗi trong bất kỳ nhật ký nào).

Xóa bộ nhớ cache khắc phục sự cố, nhưng không phải là vấn đề.


Bạn đã tìm thấy vấn đề chính xác là gì?
Công nghệ Emipro Pvt. Công ty TNHH

Không, chưa, chúng tôi chỉ thêm một tác vụ theo lịch trình để kiểm tra 404 mỗi phút và làm mới bộ đệm nếu tìm thấy. Không lý tưởng, nhưng sửa chữa tốt nhất chúng ta có thể tìm thấy. Chỉ xảy ra kể từ khi nâng cấp lên Magento 2.3.
Dan

3

Chúng tôi cũng đang đối mặt với cùng một vấn đề và nó vẫn cần được gỡ lỗi một cách chi tiết. Nhưng chúng tôi đang sử dụng dưới đây là sửa chữa tạm thời

Sửa đổi phương thức 'aroundDispatch' của nhà cung cấp tệp / magento / mô-đun-trang-bộ đệm / Mô hình / Ứng dụng / FrontContoder / BuildinPlugin.php như bên dưới

public function aroundDispatch(
        \Magento\Framework\App\FrontControllerInterface $subject,
        \Closure $proceed,
        \Magento\Framework\App\RequestInterface $request
    ) {
        $this->version->process();
        if (!$this->config->isEnabled() || $this->config->getType() != \Magento\PageCache\Model\Config::BUILT_IN) {
            return $proceed($request);
        }
        $result = $this->kernel->load();
        if ($result === false || ($result instanceof ResponseHttp && $result->getStatusCode() == 404)) {
            $result = $proceed($request);
            if ($result instanceof ResponseHttp) {
                $this->addDebugHeaders($result);
                $this->kernel->process($result);
            }
        } else {
            $this->addDebugHeader($result, 'X-Magento-Cache-Debug', 'HIT', true);
        }
        return $result;
    }

Sự thay đổi trong chức năng là: Điều kiện IF thay đổi từ

if ($result === false) {

đến

if ($result === false || ($result instanceof ResponseHttp && $result->getStatusCode() == 404)) {

Thay đổi mã này sẽ bỏ qua và xây dựng lại bộ đệm toàn bộ trang nếu kết quả tìm thấy trong bộ đệm là 404.

Tôi hi vọng cái này giúp được.


2

kiểm tra bảng url_rewrite, vào bảng đó trang chủ request_path trống ở đó và xóa mục đó, sau đó kiểm tra

php bin/magento cache:flush
php bin/magento cache:clean

Chúng tôi đã kiểm tra điều đó. Nhưng chúng tôi không nhận được request_path trống.
Công nghệ Emipro Pvt. Ltd.

1

Có vẻ như điều này là do lỗi bộ nhớ cache toàn trang Magento 2 trong chế độ xem của cửa hàng muti. Tôi đã vô hiệu hóa bộ đệm toàn bộ trang từ env.php. Nó dường như để khắc phục vấn đề. Phải gỡ lỗi nhiều hơn để tìm hiểu.

Sẽ cập nhật các bạn sớm.

Cập nhật. tìm thấy vấn đề Điều này là do Magento 2 không xử lý các yêu cầu HTTP Head. Khi một bot truy cập trang web với yêu cầu loại CHÍNH, Magento trả về 404 và lưu trữ nó. Giải pháp như sau:

From e3890bfda2d67508df76ce00cdd675c60743ace5 Mon Sep 17 00:00:00 2001
From: Siyu Qian <david@magebinary.com>
Date: Fri, 7 Jun 2019 15:17:40 +1200
Subject: [PATCH] BMQ-54 Full page cache issue

---
 .../Plugin/PreventCachingHead404ResultsPlugin.php  | 37 ++++++++++++++++++++++
 app/code/MageBinary/Theme/etc/di.xml               |  3 ++
 2 files changed, 40 insertions(+)
 create mode 100644 app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php

diff --git a/app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php b/app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php
new file mode 100644
index 0000000..a16ad17
--- /dev/null
+++ b/app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php
@@ -0,0 +1,37 @@
+<?php
+namespace MageBinary\Theme\Plugin;
+
+class PreventCachingHead404ResultsPlugin
+{
+    /**
+     * @var \Magento\Framework\App\Request\Http
+     */
+    protected $request;
+
+    /**
+     * PreventCachingHeadRequestsPlugin constructor.
+     * @param \Magento\Framework\App\Request\Http $request
+     */
+    public function __construct(\Magento\Framework\App\Request\Http $request)
+    {
+        $this->request = $request;
+    }
+
+    /**
+     * Prevent caching HEAD requests that return a 404 result
+     * @param \Magento\Framework\App\PageCache\Kernel $subject
+     * @param callable $proceed
+     * @param \Magento\Framework\App\Response\Http $response
+     * @return void
+     */
+    public function aroundProcess(
+        \Magento\Framework\App\PageCache\Kernel $subject,
+        callable $proceed,
+        \Magento\Framework\App\Response\Http $response
+    ) {
+        if ($this->request->isHead() && $response->getHttpResponseCode() == 404) {
+            return;
+        }
+        return $proceed($response);
+    }
+}
\ No newline at end of file
diff --git a/app/code/MageBinary/Theme/etc/di.xml b/app/code/MageBinary/Theme/etc/di.xml
index 5dfebc7..7df8e7a 100644
--- a/app/code/MageBinary/Theme/etc/di.xml
+++ b/app/code/MageBinary/Theme/etc/di.xml
@@ -16,4 +16,7 @@
     </type>
     <preference for="Magento\Framework\Url\QueryParamsResolver" type="MageBinary\Theme\Url\QueryParamsResolver" />
     <preference for="Magento\CatalogWidget\Model\Rule\Condition\Product" type="MageBinary\Theme\CatalogWidget\Rule\Condition\Product" />
+    <type name="Magento\Framework\App\PageCache\Kernel">
+        <plugin name="prevent_caching_404_head_results" type="MageBinary\Theme\Plugin\PreventCachingHead404ResultsPlugin" />
+    </type>
 </config>
-- 
2.10.5

Bạn đã tìm thấy bất kỳ giải pháp cho vấn đề bộ nhớ cache toàn bộ trang 404 trên trang chủ? Tôi đã phải đối mặt với các vấn đề tương tự trên trang chủ nơi trang chủ somtimes sẽ là 404 và nếu tôi xóa bộ nhớ cache toàn trang, nó hoạt động tốt.
Ajay

0

Chúng tôi đang đối mặt với cùng một vấn đề. Trang chủ và một số trang khác ngẫu nhiên cung cấp 404. Sau khi xóa bộ đệm trang, nó hoạt động tốt. Nó xảy ra khá ngẫu nhiên - đôi khi xảy ra thẳng trong 4 phút. Sau đó, điều đó không xảy ra trong 5 giờ tiếp theo, v.v. Không có request_path trống nào trong bảng url_rewrite. Trong trường hợp của chúng tôi, vấn đề xuất hiện sau khi chúng tôi:

  • Đã cập nhật Magento 2.3.0 -> 2.3.1
  • Vô hiệu hóa Redis

Sẽ điều tra thêm.


Có tin gì không? Tôi đang làm việc trên magento 2.3.1 và đối mặt với cùng một vấn đề.
Plim

@Plim Có. Nó đã được sửa trong 2.3.2. Bạn có thể cập nhật hoặc vá lỗi. github.com/magento/magento2/issues/21299 Tóm lại: Yêu cầu CHÍNH cung cấp 404 và trên các trang khác nhau và sau đó các trang đó được lưu trữ. Và cho đến khi bạn xóa bộ nhớ cache, nó sẽ hiển thị 404.
Raido
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.