Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
AlikDex
Сообщения: 20
Зарегистрирован: 2015.07.28, 18:07

Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение AlikDex »

Т.е. если параметр лишний (не используется в скрипте), то должно отдаваться 404. И показывать только то, что разрешено.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение futbolim »

Сделайте родителский контрол. В нём проверяйте.
AlikDex
Сообщения: 20
Зарегистрирован: 2015.07.28, 18:07

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение AlikDex »

это как? )
я совсем зеленый.
aquy
Сообщения: 48
Зарегистрирован: 2014.08.21, 09:35

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение aquy »

в общем случае

Код: Выделить всё

'enableStrictParsing' => true,
 
в urlManager в конфигурацию
padlyuck
Сообщения: 302
Зарегистрирован: 2015.02.03, 09:50

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение padlyuck »

@aquy И после этого сайт начнет выдавать 404 ошибку на левые параметры в $_GET?
Автор хочет запретить левые параметры в урл и пропускать запросы только с ограниченным списком параметров. для этого ему нужен базовый контроллер с beforeAction и проверка в нем в зависимости от контроллера и экшена, но сдается мне ТС не осознает какие грабли себе раскладывает
AlikDex
Сообщения: 20
Зарегистрирован: 2015.07.28, 18:07

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение AlikDex »

padlyuck писал(а):@aquy И после этого сайт начнет выдавать 404 ошибку на левые параметры в $_GET?
Автор хочет запретить левые параметры в урл и пропускать запросы только с ограниченным списком параметров. для этого ему нужен базовый контроллер с beforeAction и проверка в нем в зависимости от контроллера и экшена, но сдается мне ТС не осознает какие грабли себе раскладывает
возможно не осознаю в контексте фреймворка yii, но так должно быть, если логически подумать. Я то думал может как-то бехавиорсы настроить... а гуглил гуглил, оказывается народ такими вопросами даже не задается.
padlyuck
Сообщения: 302
Зарегистрирован: 2015.02.03, 09:50

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение padlyuck »

а причем тут юи? вам придется прописать список всех возможных допустимых параметров для каждого запроса. для примера: у меня есть в админке страница со списком записей, в ней 5 поисковых столбцов - т.е. это 5 параметров в запросе + 1 на пагинацию. сущностей в проекте на данный момент порядка 20. т.е. в проверке мне нужно будет указать около 120 параметров в зависимости от контроллера и действия, и каждый раз обновлять этот список если в процессе разработки будет меняться структура моделей.

Вы скажите ДЛЯ ЧЕГО вам это нужно?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение ElisDN »

Если это для SEO, то используйте лучше Url::canonical() и не беспокойтесь.
AlikDex
Сообщения: 20
Зарегистрирован: 2015.07.28, 18:07

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение AlikDex »

padlyuck писал(а):а причем тут юи? вам придется прописать список всех возможных допустимых параметров для каждого запроса. для примера: у меня есть в админке страница со списком записей, в ней 5 поисковых столбцов - т.е. это 5 параметров в запросе + 1 на пагинацию. сущностей в проекте на данный момент порядка 20. т.е. в проверке мне нужно будет указать около 120 параметров в зависимости от контроллера и действия, и каждый раз обновлять этот список если в процессе разработки будет меняться структура моделей.

Вы скажите ДЛЯ ЧЕГО вам это нужно?
Вы сами ответили на свой вопрос. В каждом контроллере проверять допустимость параметров именно для него, а по дефолту отдавать 404.
5 на контроллер? Да не вопрос. Для СЕО, для чего ж еще. Да и вообще странно, что левые урлы обрабатываются. В хтакцесс запрет на все левое достаточно легко сделать. Но я и пытаюсь освоить юи, чтобы уйти от этого хтакцесса(и апача в целом)! Чтобы на уровне фреймворка решалось.
ElisDN писал(а):Если это для SEO, то используйте лучше Url::canonical() и не беспокойтесь.
Пока поиковик склеит все страницы как надо пройдет немало времени. Это особенно актуально на вч запросах в топе. Вы видимо не сталкивались с ситуациями, когда конкуренты не жалея средств просто заспамливают ваш ресурс вот такими левыми ссылками, от чего сайт улетает в пучины топа.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение ElisDN »

Тогда добавьте блокирующий фильтр:

Код: Выделить всё

if (Yii::$app->request->absoluteUrl !== $Url::canonical()) {
    throw new NotFoundHttpException('Not found');
} 
Или сделайте с редиректом на правильный адрес:

Код: Выделить всё

$canonical = Url::canonical();
if (Yii::$app->request->absoluteUrl !== $canonical) {
    return $this->redirect($canonical, 301);
} 
Но при этом в действия не забудьте явно добавить все разрешённые параметры:

Код: Выделить всё

public function actionIndex($page = null) {...}
чтобы работало разбиение на страницы.
notgosu
Сообщения: 124
Зарегистрирован: 2012.05.22, 17:46

Re: Как в Yii2 запретить все лишние параметры в урл, выводя 404?

Сообщение notgosu »

Реализовывал подобную задачу недавно. Для себя решил этот вопрос фильтром для контроллеров:
https://gist.github.com/notgosu/0597e00b813975f9d930
в комментариях есть пример по использованию.
Ответить