Страницы вида: сайт/index.php/страница код 200OK

Настроены ЧПУ и корректно работают, НО:
Страницы вида: сайт/index.php/страница отдают всегда код 200 ОК (даже если такой страницы нет).
Помимо этого, всегда отображается главная страница, даже если страница существует, например есть страница сайт/оплата со своим контентом, по адресу сайт/index.php/оплата откроется главная и отдаст код 200 ОК.

В чем может быть проблема, и как ее решить?
MODX Revo 2.5.7 php7.1
Павел Степанов
22 августа 2017, 15:24
modx.pro
1
1 421
0

Комментарии: 6

t.g
t.g
22 августа 2017, 19:39
+1
Есть такая проблема, можно решить через небольшой плагин, или через .htaccess
<?php
switch ($modx->event->name) {
    case 'OnHandleRequest':
        if (strpos($_SERVER['REQUEST_URI'],'index.php') !== false && $modx->context->get('key') != 'mgr') {
            if (!empty($_GET['id'])) {
                $id = (int)$_GET['id'];
                if (!$modx->getCount('modResource', array('id' => $id, 'published' => 1, 'deleted' => 0))) {
                    $modx->sendErrorPage();
                } 
            } else {
                $id = $modx->getOption('site_start', null, 1);
            }
            $modx->sendRedirect($modx->makeUrl($id),array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
        }
        break;
}
    Павел Степанов
    22 августа 2017, 20:58
    0
    Спасибо, вы не подскажите как это сделать через .htaccess или как использовать плагин? Он должен вызываться по событию? И мне кажется стоит делать редирект на страницу 404, а то он всегда на главную редиректит
      t.g
      t.g
      22 августа 2017, 21:11
      1
      +2
      Вешаете на событие OnHandleRequest, или через файл .htaccess можна так.
      RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
      RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
        Павел Степанов
        22 августа 2017, 21:25
        0
        Через .htaccess работает еще лучше, спасибо большое!
          t.g
          t.g
          22 августа 2017, 21:34
          0
          Не за что!
      Павел Степанов
      22 августа 2017, 21:14
      1
      +1
      Повесил на событие OnHandleRequest
      <?php
      if (strpos($_SERVER['REQUEST_URI'],'index.php') !== false && $modx->context->get('key') != 'mgr') {
          $modx->sendErrorPage();
      }
      Работает отлично
      Попробую через .htaccess
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6