0

我使用 Grav 创建了一个新网站。旧站点的页面必须使用以 .php 结尾的 url 访问。 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);”行 有重定向到主页的指令?

上述错误仅适用于不以 .php 结尾的 url 以 .php 结尾的url
被 Grav 处理,所以我猜是 Web 服务器在处理这些错误。网络服务器是 nginx/1.11.9。
我尝试将以下几行添加到我的 nginx.conf 中,但这并没有解决问题。

error_page 404 = @foobar;

    location @foobar {
      rewrite  .*  / permanent;
    }
4

1 回答 1

1

我会在服务器端处理你的两个问题。

如何将 /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 /;
  }
}

希望能帮助到你 !

于 2017-10-14T09:31:58.650 回答