Как перенаправить страницы с расширением php в GRAV

Я создал новый веб-сайт, используя Grav.
На старом сайте есть страницы, к которым нужно было обращаться, используя URL-адреса, заканчивающиеся на .php
URL /somefolder/somepage.php просто дает мне «Файл не найден».
Это НЕ приводит меня к встроенной странице ошибки Grav.

Я отключил плагин ошибок Grav, чтобы он не мешал.

Как мне переписать /somefolder/somepage.php в / somefolder / somepage
Кроме того, как я могу перенаправить любая ошибка 404 на главную страницу?
Ошибка обрабатывается:

/var/www/grav-admin/system/src/Grav/Common/Processors/PagesProcessor.php

if (!$page->routable()) {
// If no page found, fire event
$event = $this->container->fireEvent('onPageNotFound');

if (isset($event->page)) {
unset ($this->container['page']);
$this->container['page'] = $event->page;
} else {
throw new \RuntimeException('Page Not Found', 404);
}
}

Как я могу заменить строку «throw new \ RuntimeException (‘Page Not Found’, 404);» с инструкцией по перенаправлению на домашнюю страницу?

Вышеуказанная ошибка ловится только для URL НЕ заканчивается в .php
URL-адреса, оканчивающиеся на .php, не обрабатываются Grav, поэтому я полагаю, что именно веб-сервер обрабатывает эти ошибки. Веб-сервер nginx / 1.11.9.
Я попытался добавить строки ниже в мой nginx.conf, но это не решило проблему.

error_page 404 = @foobar;

location @foobar {
rewrite  .*  / permanent;
}

0

Решение

Я бы справился с обеими вашими проблемами на стороне сервера.

Как мне переписать /somefolder/somepage.php в / somefolder / somepage

Я хотел бы сделать что-то вроде:

location ~ \.php$ {
if (!-f $request_filename) {
rewrite ^(.*)\.php$ $1.html permanent;
}
}

Что означает: для каждого запрошенного php-файла удалите php и замените .php на .html.

Кроме того, как я могу перенаправить любую ошибку 404 на домашнюю страницу?

Эта проблема может возникнуть из-за 2 общих вещей:

  • Проблема с заголовком http: вы не меняете здесь заголовок http в своем перенаправлении, поэтому вы по-прежнему обслуживаете 404. Прежде чем проверять, существует ли местоположение, сервер выполняет поиск статуса кода http. Здесь осталось 404.
  • вы можете использовать fastcgi_intercept_errors on;

Для этой проблемы я бы использовал этот кусок кода:

server {
...
index index.html index.php
error_page 404 = @hpredirect;
...
location @hpredirect {
return 301 /;
}
}

Надеюсь, поможет !

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]