Главная страница / Советы / Правила Rewrite для ЧПУ на серверах под управлением Nginx
май 14 2018

Правила Rewrite для ЧПУ на серверах под управлением Nginx

Дорогие друзья,

Как известно сервер под управлением Apache не является оптимальным решением для создания высокопосещаемых проектов, и по мере роста посетителей сайта, потребление памяти сервером также растет в геометрической прогрессии. Поэтому при оптимизации серверного ПО очень часто прибегают к установке связки из легкого кеширующего сервера Nginx как фронтсервера и Apache как бэксервера. Данная связка позволяет существенно сократить расход памяти и увеличить быстродействие работы сервера. Однако существует еще более производительное решение, и это установка сервера Nginx как единственного standalone сервера, при этом Apache полностью убирается из системы, что позволяет добиться еще большей производительности. Единственной проблемой при работе с DLE такой системы, это несовместимость стандартных правил ЧПУ в файле .htaccess, которые прописаны для Apache. Поэтому если вы решите ставить Nginx как отдельный единственный сервер, мы предлагаем вам скачать правила написанные для Nginx.

Правила предназначены для версии: DataLife Engine 17.3.

Внимание!

Просмотр данной информации доступен только пользователям имеющим действующую лицензию на скрипт. Если вы уже приобретали скрипт, то вам необходимо зайти на сайт под своим клиентским аккаунтом. Если срок вашей лицензии истек, то вы можете продлить ее в своем профиле на нашем сайте

Комментарии

  1. xoxmalv (Клиенты)

    13 октября 2018 16:18 41 комментарий
    celsoft,
    Спасибо! Проблема была тут:

    if ($request_uri ~ "^(.*)index\.(?:php|html)$") {
    return 301 $1;
    }


    Не добавил знак $ чтобы только index.php без аргументов редиректился ;)
  2. celsoft (Администраторы)

    13 октября 2018 16:23 4 137 комментариев
    Цитата: xoxmalv
    celsoft,
    Спасибо! Проблема была тут:

    if ($request_uri ~ "^(.*)index\.(?:php|html)$") {
    return 301 $1;
    }


    Не добавил знак $ чтобы только index.php без аргументов редиректился ;)

    Это правило не нужно вообще. DLE использует канонические ссылки. Редиректить ничего не нужно. А это правило вообще по сути вредно, например вы не сможете вести ту же статистику от разных сервисов, которые зачастую передают свои доп. параметры в URL для этого
  3. Crashlabs (Клиенты)

    6 марта 2019 08:15 10 комментариев
    Актуальны ли правила для DLE 13.2? Или последняя версия не отличается от предыдущей?
  4. celsoft (Администраторы)

    6 марта 2019 11:01 4 137 комментариев
    Цитата: Crashlabs
    Актуальны ли правила для DLE 13.2? Или последняя версия не отличается от предыдущей?

    Эти правила для версии 13.2
  5. jameskinooliver (Клиенты)

    18 апреля 2019 21:54 1 комментарий
    а как закрыть папки открытые для записи 777 , чтобы не загрузили ничего лишнего

    /engine/data
    /engine/cache

    Вот так пойдет?

    location /engine/cache/ {
    deny all;
    }

    location /engine/data/ {
    deny all;
    }

    location /engine/data/emoticons/ {
    allow all;
    }

    Или нужно запретить запуск php?
    И запрет не получится поставить, в папке дата есть php скрипты

    celsoft,
    То есть на дле 13.2 на nginx не нужны эти правила?

    location /uploads/ {
    location ~\.(php)$ {
    return 403;
    }
    }
    location /backup/ {
    location ~\.(php)$ {
    return 403;
    }
    }
    location /uploads/fotos/ {
    location ~\.(php)$ {
    return 403;
    }
    }
    location /templates/ {
    location ~\.(php)$ {
    return 403;
    }
    }
    location /language/ {
    location ~\.(php)$ {
    return 403;
    }
    }
  6. celsoft (Администраторы)

    19 апреля 2019 00:26 4 137 комментариев
    Цитата: jameskinooliver
    а как закрыть папки открытые для записи 777 , чтобы не загрузили ничего лишнего

    Чтобы не загрузили ничего лишнего защищают скрипты, а не настройки nginx. Потому как загружают также через скрипты.

    Цитата: jameskinooliver
    То есть на дле 13.2 на nginx не нужны эти правила?

    Они ни на какой версии не нужны. DLE не нуждается в этих правилах. И защиты всегда нужно делать на уровне ПО, а не на уровне настроек папок.
  7. klumba (Клиенты)

    5 октября 2019 15:09 3 комментария
    Для 13.3 изменения есть ?
  8. celsoft (Администраторы)

    5 октября 2019 19:05 4 137 комментариев
    Цитата: klumba
    Для 13.3 изменения есть ?

    Нет
  9. Alex-GR (Клиенты)

    8 октября 2019 08:33 24 комментария
    celsoft, почему в файле .htaccess используются директивы:
    rewrite "^/page,([0-9]+),([^/]+).html$" /index.php?do=static&page=$2&news_page=$1&seourl=$2 last;
    rewrite "^/print:([^/]+).html$" /index.php?mod=print&do=static&page=$1&seourl=$1 last;
    RewriteRule ^([^/]+).html$ index.php?do=static&page=$1&seourl=$1 [L]
    а для Nginx в этих директивах отсутствует &seourl=$...:
    rewrite "^/page,([0-9]+),([^/]+).html$" /index.php?do=static&page=$2&news_page=$1 last;
    rewrite "^/print:([^/]+).html$" /index.php?mod=print&do=static&page=$1 last;
    rewrite "^/([^/]+).html$" /index.php?do=static&page=$1 last;
  10. Alex-GR (Клиенты)

    9 октября 2019 19:57 24 комментария
    Цитата: celsoft
    Нет

    Я так и не получил ответ на свой вопрос...
  11. razer85 (Клиенты)

    7 января 2020 01:51 35 комментариев
    а где скачать правила для версии 11.3?
  12. razer85 (Клиенты)

    7 января 2020 14:56 35 комментариев
    Celsoft, напишите пожалуйста как сделать редирект с www на без www
  13. celsoft (Администраторы)

    7 января 2020 16:44 4 137 комментариев
    Цитата: razer85
    а где скачать правила для версии 11.3?

    Нигде. Это сторонняя модификация, и набор правил, а не официально поддерживаемые правила. Потому как Nginx как standalone не соответствует минимальным требованиям работы DLE https://dle-news.ru/request.html

    Эти правила не обладают официальной поддержкой. Официально поддерживается только либо Apache как standalone либо Nginx как кеширующий фронт сервер, а Apache бэксервер.

    Цитата: razer85
    Celsoft, напишите пожалуйста как сделать редирект с www на без www

    Это вам в службу поддержки вашего хостинг провайдера. Этот вопрос не относится к DLE и как следствие к технической поддержки DLE
  14. Work.Any (Клиенты)

    16 февраля 2020 20:58 8 комментариев
    Пожалуйста, обновите для 14.0.
    Установил скрипт "с нуля", сразу получаю ошибки.

    Например, вот так, ошика 404:
    https://site.ru/o-skripte/engine/editor/css/default.css

    Вот так работает:
    https://site.ru/engine/editor/css/default.css
  15. celsoft (Администраторы)

    17 февраля 2020 01:25 4 137 комментариев
    Цитата: Work.Any
    Пожалуйста, обновите для 14.0.
    Установил скрипт "с нуля", сразу получаю ошибки.

    Например, вот так, ошика 404:
    https://site.ru/o-skripte/engine/editor/css/default.css

    Вот так работает:
    https://site.ru/engine/editor/css/default.css

    Что обновить? Если ваша проблема не имеет никакого отношения к ЧПУ и этим правилам. Правила ЧПУ только для контента DLE, например новости или категории. А это у вас прямые ссылки на статику, которые отдаются в сервер напрямую, минуя DLE и минуя какие либо правила ЧПУ. Если вы ставили эти ссылки сами в шаблоне, то сделали это некорректно используя относительные ссылки вместо абсолютных. Если это выводит DLE, то значит некорректно указаны настройки скрипта, в частности адрес сайта без обязательного слеша на конце.
  16. Work.Any (Клиенты)

    17 февраля 2020 05:11 8 комментариев
    Цитата: celsoft
    Цитата: Work.Any
    Пожалуйста, обновите для 14.0.
    Установил скрипт "с нуля", сразу получаю ошибки.

    Например, вот так, ошика 404:
    https://site.ru/o-skripte/engine/editor/css/default.css

    Вот так работает:
    https://site.ru/engine/editor/css/default.css

    Что обновить? Если ваша проблема не имеет никакого отношения к ЧПУ и этим правилам. Правила ЧПУ только для контента DLE, например новости или категории. А это у вас прямые ссылки на статику, которые отдаются в сервер напрямую, минуя DLE и минуя какие либо правила ЧПУ. Если вы ставили эти ссылки сами в шаблоне, то сделали это некорректно используя относительные ссылки вместо абсолютных. Если это выводит DLE, то значит некорректно указаны настройки скрипта, в частности адрес сайта без обязательного слеша на конце.


    Добрый день, спасибо за ответ!
    Если правила Rewrite подходят для DLE 14.0, об этом хорошо-бы добавить коментарий в самом сообщении.
    По моей проблеме, возможно правила действительно не при чём, я не очень хорошо в этом разбираюсь.

    Мои действия:
    1, Произвел установку скрипта "с нуля" на читстый сервер.
    2. Скопировал правила Rewrite в конфиг Nginx.
    Ничего больше не менял и не настраивал.

    Проверил сейчас в админ-панели, в настройках скрипта, в поле "Домашняя страница сайта" указан домен со слешем в конце.
    При переходе с главной страницы на первую новость открывается битая страница, потому что не подгружаются стили и скрипты (пример привёл выше). В чем ещё может быть проблема?
  17. celsoft (Администраторы)

    18 февраля 2020 20:42 4 137 комментариев
    Цитата: Work.Any
    Проверил сейчас в админ-панели, в настройках скрипта, в поле "Домашняя страница сайта" указан домен со слешем в конце.
    При переходе с главной страницы на первую новость открывается битая страница, потому что не подгружаются стили и скрипты (пример привёл выше). В чем ещё может быть проблема?

    В правилах нет ссылок и указаний на ваши стили и скрипты. Значит они неправильно прописаны в шаблоне.
    1. Work.Any (Клиенты)

      20 февраля 2020 19:11 8 комментариев
      Возможно Вы правы, и писать о проблеме нужно в другом месте.
      Пока просто выключил ЧПУ в настройках и проблема исчезла.
      Будет время, покопаюсь.
      Спасибо!
      1. celsoft (Администраторы)

        21 февраля 2020 02:50 4 137 комментариев
        Ваша проблема из за того, что вместо абсолютных ссылок вы ставите относительные, поэтому проблема уходит при отключении ЧПУ, т.к. вы остаетесь в пределах одного пути.
  18. Work.Any (Клиенты)

    9 марта 2020 18:08 8 комментариев
    Добрый вечер celsoft!
    Извините за долгий ответ, совсем не было времени этим вопросом заниматься.
    Повторюсь, я никаких ссылок нигде не указывал.
    Я провел установку скрипта согласно инструкии (Documentation/install.html). Запустил install.php и прощел до конца.
    В процессе установки потребовалось указать данные для подключения к SQL и логин/пароль администратора, всё.
    После установки сразу ряд проблем, скорее всего это надо писать не здесь, а в теме новой версии скрипта 14.0.

    Например вот эти две картинки точно ни у кого не работают, потому, что после демена нет "/" и изменить эти ссылки до активации скрипта не возможно:
    https://domain.rutemplates/Default/images/_banner_.gif
    https://domain.ruuploads/boxsmall.jpg


    По проблеме с ЧПУ, скорее всего Вы правы, и это не имеет отношения к правилам rewrite.
    В этом случае проблема опять таки в новой версии скрипта, в самом дистрибутиве.
    Я только провел установку скрипта, нигде ничего не менял, всё по дефолту.

    Подскажите пожалуйста, где находятся ссылки о которых Вы пишете?
    Хотя-бы посмотрю, что там, абсолютные или относительные ссылки.
    Спасибо!
  19. celsoft (Администраторы)

    9 марта 2020 23:08 4 137 комментариев
    Цитата: Work.Any
    Например вот эти две картинки точно ни у кого не работают, потому, что после демена нет "/" и изменить эти ссылки до активации скрипта не возможно:

    А быть должен, и работает у всех, если не работает у вас, это не значит что ни у кого не работает. Имя домена указывается в настройках скрипта и к активации не имеет никакого отношения.

    Цитата: Work.Any
    Подскажите пожалуйста, где находятся ссылки о которых Вы пишете?

    непосредственно эти две находятся в тексте новостей, а появились они из за неверно указанного имени домена в настройках скрипта. Для опубликованных новостей, изменения в настройках уже не играют никакой роли, и нужно редактировать непосредственно новости и менять ссылки в тексте новостей. Настройки влияют на новые новости и новые загруженные картинки и т.д. а также на шаблоны.
  20. Work.Any (Клиенты)

    10 марта 2020 19:19 8 комментариев
    Цитата: celsoft
    Цитата: Work.Any
    Например вот эти две картинки точно ни у кого не работают, потому, что после демена нет "/" и изменить эти ссылки до активации скрипта не возможно:

    А быть должен, и работает у всех, если не работает у вас, это не значит что ни у кого не работает. Имя домена указывается в настройках скрипта и к активации не имеет никакого отношения.

    Цитата: Work.Any
    Подскажите пожалуйста, где находятся ссылки о которых Вы пишете?

    непосредственно эти две находятся в тексте новостей, а появились они из за неверно указанного имени домена в настройках скрипта. Для опубликованных новостей, изменения в настройках уже не играют никакой роли, и нужно редактировать непосредственно новости и менять ссылки в тексте новостей. Настройки влияют на новые новости и новые загруженные картинки и т.д. а также на шаблоны.


    Добрый вечер, спасибо за уделенное время!
    Конструктивного диалога у нас не получается. Вы либо не хотите меня слышать, либо не слышите.
  21. celsoft (Администраторы)

    11 марта 2020 00:46 4 137 комментариев
    Цитата: Work.Any
    Конструктивного диалога у нас не получается. Вы либо не хотите меня слышать, либо не слышите.

    Зря вы так, я вас прекрасно слышу и написал что и где находится относительно того что вы написали. У вас что нет в настройках скрипта настроек адреса вашего сайта? Есть. Там что нельзя проверить и указать имя корректно со слешем на конце? Можно. Связано редактирование новостей и настроек скрипта в админпанели? Не связано.

    В чем именно вам ответили на ваши вопросы некорректно?
  22. Work.Any (Клиенты)

    14 марта 2020 15:08 8 комментариев
    Извините за долгий ответ, на неделе совсем не было времени.
    Возможно, Вы давно не устанавливали DLE "с нуля". Ещё раз расскажу всё по порядку максимально подробно.

    1. Что было сделано:
    - На чистый сервер установлен скаченный здесь дистрибудив скрипта версии 14.0.
    - Во время установки указывать домен не нужно, домен определяется автоматически. После установки в настройках скрипта можно увидеть правильно указанный домен со слешом в конце.
    - Установка скрипта прошла до конца и без ошибок.
    - в конфиг Nginx были скопированы правила скаченные здесь.

    2. С чем столкнулся после установки:
    - Открываю сайт первый раз после установки. При этом никаких изменений в скрипте не делалось, в настройках тоже ничего не менялось, всё "из коробки".
    - Первое, что бросается в глаза, это то, как долго грузится эти две картинки (почему в этих ссылках нет слеша после домена мне не известно, при этом в настройках скрипта слешь после домена указан. Это был первый мой вопрос):
    https://domain.rutemplates/Default/images/_banner_.gif
    https://domain.ruuploads/boxsmall.jpg
    - Вторая проблема, по умолчанию после установки включены ЧПУ (Тип 2) и есть уже созданные три новости (Добро пожаловать, Приобретение и оплата скрипта, Осуществление технической поддержки скрипта). При простомтре этих новостей не загружается статический контент, ошибка 404. Это был второй мой вопрос. Пример:
    https://domain.ru/o-skripte/templates/Green/css/styles.css
    При этом по такой ссылке css доступен:
    https://domain.ru/templates/Green/css/styles.css
    - Обнаружив эти две проблемы сразу после установки скрипта "из коробки" я решил, что проблема в "правилах Rewrite для ЧПУ на серверах под управлением Nginx" и написал Вам. Вы сказали, что правила тут ни при чём.
    - Теперь основная версия проблемы заключается в том, что проблема в самом дистибутиве 14.0. Думаю удалить 14.0 и поставить 13.3.
    1. celsoft (Администраторы)

      14 марта 2020 15:52 4 137 комментариев
      Имя домена и путь при установке скрипта определяется автоматически. Его не задаешь при установке, потом то что определил DLE, используется для записи в настройки первоначально а также эта же переменная используется для записи первоначального контента новостей. И у вас по вашему описанию, одна и та же переменная в один и тот же промежуток времени имеет разные !!! значения. Потому что не может в настройках быть записано одно, а в новостях другое. А у вас судя по вашему описанию именно так. Но так не бывает и быть не может, это уже относится к какой то магии ))). Если бы скрипт из за некорректной работы определял неверно домен и путь, то у вас везде было бы неправильно, и ваши ссылки и в настройках скрипта. потому как и там и там одно значение используется, а у вас оказались разные не соответствующие значения, притом одной и той же переменной.

      В чем именно ваша проблема, почему так, происходит как вы описали, я сказать и даже предсказать уже не могу. Но к ЧПУ и правилам ЧПУ это не имеет отношения совершенно никакого. Все что я могу предположить, это какое то серверное окружение настроено как то неправильно. Что именно как и почему угадать уже нельзя, нужно осматривать визуально ваш сайт, смотреть состояние всех переменных, и серверного окружения.
      1. Work.Any (Клиенты)

        14 марта 2020 18:00 8 комментариев
        Его не задаешь при установке, потом то что определил DLE, используется для записи в настройки первоначально а также эта же переменная используется для записи первоначального контента новостей.


        1. Проблема со слешем не относится к новостям. Проблема со слешем относится только к указанным двум ссылкам на рекламные банеры. Как формируются эти две ссылки не понятно.
        2. Проблема с новостями в чём-то другом. Точно не в отсутствии слеша.
  23. celsoft (Администраторы)

    14 марта 2020 20:16 4 137 комментариев
    Цитата: Work.Any
    1. Проблема со слешем не относится к новостям. Проблема со слешем относится только к указанным двум ссылкам на рекламные банеры. Как формируются эти две ссылки не понятно.

    Как вы делаете подобный вывод? Обьясните. Если картинка boxsmall.jpg о которой вы же написали находится в новостях и не имеет никакого отношения к баннерам. Баннер в DLE один после установки в виде демонстрации, а не два, и ссылок в нем только одна это _banner_.gif

    Цитата: Work.Any
    Проблема с новостями в чём-то другом. Точно не в отсутствии слеша.

    Тоже неверный вывод. Ваша проблема в одном и только одном, все пути у вас оказали прописаны как относительные, а не абсолютные. И только из за этого у вас проблема. А вот как корректный адрес у вас оказался при этом в настройках скрипта совершенно непонятно, потому как одинаково должно быть везде после установки. И в настройках и в новостях, и в баннерах и т.д. Потому как переменная одна, определяется одна всего один раз и в одном месте. Поэтому я вам и написал что как то странно у вас получилось что одна и та же переменная оказалась с разным значением в разных местах. И о причинах, как это получилось у вас я могу сказать только визуально осмотрев сайт и запустив установку на нем. Гадать тут уже бессмысленно. Обратитесь в тех. поддержку и предоставьте доступы по FTP и нужные для установки. Мы проверим что там у вас на сервере и как работает ваше серверное ПО.
    1. Work.Any (Клиенты)

      15 марта 2020 18:48 8 комментариев
      Хорошо, спасибо!
  24. webdesby (Посетители)

    31 мая 2020 09:50 6 комментариев
    А я нашёл метод интереснее (ведь не у всех htaccess дефолтный, кто-то расширяет)
    1. Идёт на сайт https://winginx.com/ru/htaccess
    2. Вставляем туда свой .htaccess
    3. Конвертируем
    4. Забираем текст обратно в файл htaccess
    5. Заменяем все вхождения слова break на last
    6. Готово! Получили рабочий .htaccess для nginx
  25. ntrtv (Клиенты)

    21 сентября 2021 20:28 207 комментариев

    Скажите, пожалуйста, эти правила не требуется добавлять, если на сайте отключены ЧПУ?

    1. celsoft (Администраторы)

      22 сентября 2021 10:02 4 137 комментариев

      Нет. Не требуется

  26. AlexeyFX (Клиенты)

    3 мая 2022 06:38 5 комментариев

    Здравствуйте.

    Веб сервер "Nginx standalone" чем то отличается от обычного nginx/1.20.2 используемого в ispmanager?
    Представленный код в "nginx rewrite rules.txt" в какой часть кода нужно вставлять в "nginx.conf" ?

  27. celsoft (Администраторы)

    4 мая 2022 14:14 4 137 комментариев
    Цитата: AlexeyFX
    Веб сервер "Nginx standalone" чем то отличается от обычного nginx/1.20.2 используемого в ispmanager?

    Standalone это не версия Nginx. Это тип его использования, т.е. не как прокси сервер, а как единственный и основной, без использования Апача.

    Цитата: AlexeyFX
    Представленный код в "nginx rewrite rules.txt" в какой часть кода нужно вставлять в "nginx.conf" ?

    Зависит от других настроек и конфигурации. Точное место куда именно применительно к вашему серверу и домену это вставлять вам нужно узнать в службе поддержки вашего хостинга, который вам настраивает конфигурацию серверного ПО.

  28. Olegazzz (Клиенты)

    5 января 2023 19:23 2 комментария

    Поделитесь для версии 14.3 очень нужно.

    1. celsoft (Администраторы)

      7 января 2023 09:10 4 137 комментариев

      Думаю вряд ли это у кого либо сохранилось. Это стороннее дополнение в к скрипту и обновляется по мере выхода новых версий DLE. Отдельно к каждой версии данное дополнение не поставляется.

  29. Yuki (Посетители)

    22 мая 2023 13:32 1 комментарий

    В файле "nginx rewrite rules.txt" дублируются четыре строки с 70 по 78ю.

    rewrite "^/static_pages.xml$" /uploads/static_pages.xml last;
    rewrite "^/category_pages.xml$" /uploads/category_pages.xml last;
    rewrite "^/tags_pages.xml$" /uploads/tags_pages.xml last;
    rewrite "^/news_pages(\d*?).xml$" /uploads/news_pages$1.xml last;

    А так же нет правила для страницы /pages.xml которая генерируется при создании карты сайта

    1. celsoft (Администраторы)

      22 мая 2023 15:03 4 137 комментариев

      Дублирующие строки удалили как не нужные. А вот /pages.xml стандартный DLE не генерирует, нет таких страниц в стандартном оригинальном DLE. Это уже какая то ваша модификация или плагин в скрипте. Стандартный DLE генерирует news_pages.xml и данное правило там есть.

  30. Uralbox (Клиенты)

    19 июня 2023 10:22 60 комментариев

    Актуально ли для DLE 16.1?

    Правильными ли являются ли эти правила для защиты?

    Если нет, то напишите пожалуйста как должно быть

    location ~* /templates/.+\.tpl {
            deny all;
        }
    location ~* (engine/cache) {
            deny all;
        }
    location /backup/ {
            deny all;
        }
    location ~ /\.ht {
            deny  all;
        }
    
         location /uploads/ {   
            location ~\.(php)$ {
              return 403;
            }
         }
         location /uploads/fotos/ {   
            location ~\.(php)$ {
              return 403;
            }
         }
         location /templates/ {   
            location ~\.(php)$ {
              return 403;
            }
         }
         location /language/ {   
            location ~\.(php)$ {
              return 403;
            }
         }


    Возможно подобный вариант?

    location ~* ^/(engine/data|engine/cache|uploads|templates|language).*\.(php|txt) {
    return 404;
    }
    location ~* /templates/.+\.tpl {
    return 404;
    }
    location ~ /\.ht {
    return 404;
    }
    1. celsoft (Администраторы)

      19 июня 2023 10:39 4 137 комментариев

      Я думаю что ничего, кроме строк:

      location ~* /templates/.+\.tpl {
              deny all;
          }
      location ~* (engine/cache) {
              deny all;
          }
      location /backup/ {
              deny all;
          }

      не требуется.

Информация

Комментирование публикаций доступно только пользователям имеющим действующую лицензию на скрипт. Если вы уже приобретали скрипт, то вам необходимо зайти на сайт под своим клиентским аккаунтом.

Календарь

«    Ноябрь 2024    »
ПнВтСрЧтПтСбВс
 123
45678910
11121314151617
18192021222324
252627282930 

Опрос на сайте

Совершаете ли вы покупки в интернет?