1

Тема: Wordpress і сторінка 404

Всім доброго дня.
Є сайт mysite.com, в темі сайту є сторінка 404.php і воно відображає коректно і показує код 404.

Наприклад:
mysite.com/srakadoshka - код статус 404 і шаблон з теми /wp-content/themes/mytheme/404.php
mysite.com/asdfasdf - код статус 404 і шаблон з теми /wp-content/themes/mytheme/404.php
mysite.com/wwwweqweqweqe - код статус 404 і шаблон з теми /wp-content/themes/mytheme/404.php

а декілька сторінок типу:
mysite.com/2021/02/
mysite.com/2021/03/
mysite.com/2021/06/ - показують статус код 404, але шаблон вже від загального сервера. Проста гола сторінка, яка по замовчуванню показує на VPS.

Цю помилку я побачив в гуглвебмастерс. Все що мож перешукав-перепробував.
Як її виправити, можливо хтось зустрічався з таким?

2

Re: Wordpress і сторінка 404

чат gpt

## ✅ TL;DR (Швидкі рішення, які варто спробувати першими)

1. **Онови постійні посилання (Permalinks):**

   * Перейди в **Адмінку WordPress → Налаштування → Постійні посилання**.
   * Просто натисни **«Зберегти зміни»**, навіть якщо нічого не змінюєш.
   * Це оновить `.htaccess` — часто цього достатньо, щоб виправити дивну поведінку 404.

2. **Перевір файл `.htaccess`:**

   * Він має містити базові правила для WordPress. Ось стандартний вміст:

     ```apache
     # BEGIN WordPress
     <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteRule ^index\.php$ - [L]
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule . /index.php [L]
     </IfModule>
     # END WordPress
     ```

   * Переконайся, що цей блок існує і не перекривається іншими правилами вище нього.

---

## ???? Чому `/2021/02/` показує порожню сторінку від VPS?

Це **архівні сторінки за датою** (`/рік/місяць/`). Зазвичай WordPress намагається знайти пости за цей період.

Але якщо **раніше пости були, а зараз видалені**, WordPress все одно намагається завантажити архів — і провалюється. У такому випадку **не WordPress, а вебсервер** (Apache або Nginx) показує свою власну 404-сторінку — звідси й порожня сторінка за замовчуванням VPS.

---

## ????️ Як виправити 404 на архівах за датою

### 1. **Примусити WordPress показувати свій 404.php**

Навіть якщо постів у цьому місяці немає — ми хочемо, щоб WordPress сам обробив запит.

Додай цей код у `functions.php` своєї теми:

```php
add_action('template_redirect', function() {
    if (is_date() && !have_posts()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        nocache_headers();
        include get_query_template('404');
        exit;
    }
});
```

Цей код змушує WordPress показати власну 404-сторінку, навіть для порожніх архівів.

---

### 2. **Не дозволяй серверу перехоплювати 404**

Якщо сервер показує свою "рідну" сторінку замість теми WordPress:

* **Apache**: Перевір, чи `.htaccess` дозволяє обробку всіх URL через WordPress, особливо архівів.
* **Nginx**: Переконайся, що в блоці `location /` є рядок:

  ```nginx
  try_files $uri $uri/ /index.php?$args;
  ```

  Інакше запит може "обірватися" ще до WordPress.

---

### 3. **Перевір логи сервера**

Щоб точно зрозуміти, що відбувається:

* Подивись **логи Apache/Nginx** під час запиту до `/2021/02/`.
* Якщо запит не доходить до `index.php` — значить сервер обробляє його до WordPress.

---

### 4. **(Опційно) Перенаправ старі URL архівів**

Якщо не хочеш, щоб такі сторінки індексувались пошуковиками — можеш їх редіректити через `.htaccess` або плагін типу **Redirection**.

Приклад правила в `.htaccess`, яке перенаправляє архіви на сторінку блогу:

```apache
RedirectMatch 301 ^/202[0-9]/[01][0-9]/$ /blog/
```

---

## ✅ Що конкретно треба зробити:

1. Збережи налаштування постійних посилань (навіть без змін).
2. Перевір `.htaccess` або конфіг Nginx — щоб усі запити обробляв WordPress.
3. Додай код у `functions.php`, щоб архіви без постів віддавали `404.php`.
4. (Опційно) Додай редіректи, якщо ці URL більше не потрібні.

---

Якщо скажеш, чи в тебе **Apache** чи **Nginx** — можу дати конкретні налаштування під твій сервер.

3

Re: Wordpress і сторінка 404

frz написав:
чат gpt

## ✅ TL;DR (Швидкі рішення, які варто спробувати першими)

1. **Онови постійні посилання (Permalinks):**

   * Перейди в **Адмінку WordPress → Налаштування → Постійні посилання**.
   * Просто натисни **«Зберегти зміни»**, навіть якщо нічого не змінюєш.
   * Це оновить `.htaccess` — часто цього достатньо, щоб виправити дивну поведінку 404.

2. **Перевір файл `.htaccess`:**

   * Він має містити базові правила для WordPress. Ось стандартний вміст:

     ```apache
     # BEGIN WordPress
     <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteRule ^index\.php$ - [L]
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule . /index.php [L]
     </IfModule>
     # END WordPress
     ```

   * Переконайся, що цей блок існує і не перекривається іншими правилами вище нього.

---

## ???? Чому `/2021/02/` показує порожню сторінку від VPS?

Це **архівні сторінки за датою** (`/рік/місяць/`). Зазвичай WordPress намагається знайти пости за цей період.

Але якщо **раніше пости були, а зараз видалені**, WordPress все одно намагається завантажити архів — і провалюється. У такому випадку **не WordPress, а вебсервер** (Apache або Nginx) показує свою власну 404-сторінку — звідси й порожня сторінка за замовчуванням VPS.

---

## ????️ Як виправити 404 на архівах за датою

### 1. **Примусити WordPress показувати свій 404.php**

Навіть якщо постів у цьому місяці немає — ми хочемо, щоб WordPress сам обробив запит.

Додай цей код у `functions.php` своєї теми:

```php
add_action('template_redirect', function() {
    if (is_date() && !have_posts()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        nocache_headers();
        include get_query_template('404');
        exit;
    }
});
```

Цей код змушує WordPress показати власну 404-сторінку, навіть для порожніх архівів.

---

### 2. **Не дозволяй серверу перехоплювати 404**

Якщо сервер показує свою "рідну" сторінку замість теми WordPress:

* **Apache**: Перевір, чи `.htaccess` дозволяє обробку всіх URL через WordPress, особливо архівів.
* **Nginx**: Переконайся, що в блоці `location /` є рядок:

  ```nginx
  try_files $uri $uri/ /index.php?$args;
  ```

  Інакше запит може "обірватися" ще до WordPress.

---

### 3. **Перевір логи сервера**

Щоб точно зрозуміти, що відбувається:

* Подивись **логи Apache/Nginx** під час запиту до `/2021/02/`.
* Якщо запит не доходить до `index.php` — значить сервер обробляє його до WordPress.

---

### 4. **(Опційно) Перенаправ старі URL архівів**

Якщо не хочеш, щоб такі сторінки індексувались пошуковиками — можеш їх редіректити через `.htaccess` або плагін типу **Redirection**.

Приклад правила в `.htaccess`, яке перенаправляє архіви на сторінку блогу:

```apache
RedirectMatch 301 ^/202[0-9]/[01][0-9]/$ /blog/
```

---

## ✅ Що конкретно треба зробити:

1. Збережи налаштування постійних посилань (навіть без змін).
2. Перевір `.htaccess` або конфіг Nginx — щоб усі запити обробляв WordPress.
3. Додай код у `functions.php`, щоб архіви без постів віддавали `404.php`.
4. (Опційно) Додай редіректи, якщо ці URL більше не потрібні.

---

Якщо скажеш, чи в тебе **Apache** чи **Nginx** — можу дати конкретні налаштування під твій сервер.


Дякую, але майже всі варіанти спробував, котрі радив ГПТ  8) .