pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Возможно ли подключение к интернету в данной ситуации (фото)?

Лучший ответ: Наличие свободных пар не означает что:
1. Пары исправны
2. На коммутаторе есть свободные порты.

Худший ответ: 1. Наличие свободных мест на патч панели, не означает что туда вообще что-то можно подключить - это просто соединительная панель.
2. Я вижу, что тут подключено 10 абонентов, и вижу один толстый кабель, скорее всего 10-парка, то есть из него уже пришло только 10 пар, и даже 11-ю уже взять неоткуда.
3. Стоит верить том, что говорит ростелеком. Вы же для них клиент, без причины никто не будет НЕ подключать.
Подойдите к ним в отделение, уточните какие есть варианты, напишите заявление на имя директора, чтобы вам сообщили о возможностях. Может за некоторую сумму они смогут прокинуть от другого щитка.
Вопрос: Возможные уязвимости в этом коде?

Лучший ответ: Банальный запрос socket.emit('register');уронит ваш сервер с ошибкой, так как data будет undefined (null и undefined не могут иметь свойств)
Аналогично для data.login
Метод replace есть только у строк, вызов не функции так же выкинет ошибку
Правильно как то так:const LOGIN_REGEX = /[^a-zA-Z0-9]/; //скомпилим регулярку заранее, дабы не компилить при каждом запросе
socket.on('register', function(data){
  if(!data || typeof data.login !== 'string') { return; } //проверка на наличие и правильный тип
  if(data.login.length < 4 || data.login.length > 12) { return; } //проверка на допустимую длину, числа ставьте свои
  if(LOGIN_REGEX.test(data.login)) { return; } // такая проверка в 18 раз быстрее чем у Вас
  new User({login: data.login}).save();
});

Худший ответ: Вообще в целом это же не sql, где можно нагадить изменив строку.
Но могут быть проблемы если допустим login в дальнейшем где-то выводится без использования шаблонизаторов и т.п.
Там может быть банальный <script>
Т.е. xss.
Ну с таким фильтром вроде не пролезет.
Больше я не вижу вариантов для каких-то уязвимостей.
Единственное что здесь можно сделать это заспамить.
Наemitить в этот кусок >9000 фреймов и будет создано столько же пользователей.
Поэтому лучше такие вещи типа регистрации оставить на "обычном бекенде", с возможностью каптчу добавить и т.п.
Хотя и здесь наверно можно все это сделать.
Вопрос: Как центрировать transform: scale при position: absolute?

Лучший ответ: вы при ховере переопределяете transform&:hover {
  transform: translate(-50%, -50%) scale(1.5);
}

Худший ответ: Судя по запросу, вам необходимо выполнять масштабирование некого блока при наведении курсора (псевдокласс :hover)
За само масштабирование в ту или иную сторону 
отвечает функция scale() свойства transform, при этом совсем не играет роли в нормальном ли потоке находится ваш масштабируемый блок (position: static;) или же как у вас - position: absolute;
По умолчанию точка привязки scale - центр элемента, а вы заметьте сами прописываете вашему элементу еще и translate, который создан для сдвига в ту или иную сторону по координатам осей X и Y, именно поэтому масштабирование у вас и происходит с одновоеменным движением элемента.
Вопрос: Как резервировать серверную машину в целях отказоустойчивости?

Лучший ответ: Резервируют обычно не "машину" а сервис(ы), и в зависиости от них нужно подбирать решение.
Например Резервирование LAMP и KVM Гипервизора с виртуальными машинами будет очень отличаться.

Худший ответ: Вариантов очень много. 
Вот одни из них:
Использовать соответствующую топологию сети. Например, кольцевую или полносвязную.
Другой вариант:
Включаем оба сервер. На коммутаторе(l3) указываем запасной маршрут (с большей метрикой) ко второму серверу (резерву).
Вопрос: Как получить доступ к сетевому ресурсу по имени в домене?

Лучший ответ: При этом к данной общей папке с других машин в локальной сети свободно подключаемся. Подключаемся даже с этой машины, используя другую учетную запись.
Логично предположить, что у четной записи просто нет прав на доступ к этой папке?

Худший ответ: Пуск-Выполнить:
control userpasswords2
Откроется окно User Accounts. На вкладке Advanced (вторая вкладка) ->Manage Passwords в самом верху, откроется ещё одно окно. Ищите там сохраненные учетные данные к этому ресурсу. Удаляете и пробуйте ещё раз.
Вопрос: Как убрать обертку .fp-tableCell с плагина fullPage.js?

Лучший ответ: 2 варианта
1) Переопределить стили
2) Добавить настройку verticalCentered: false

Худший ответ: Удалить в самом скрипте:
https://github.com/alvarotrigo/fullPage.js/blob/ma...var TABLE_CELL =            'fp-tableCell';
Вопрос: Можно ли так назвать класс?

Лучший ответ: Можно ли так назвать класс: "header-footer-left-wrapper-headline"
Да, только зачем?Какое максимальное количество слов должен содержать класс?
Краткость — сестра таланта.Как вообще лучше называть классы?
Лучше по смыслу, а не визуальной составляющей. Например, не red-text, а error-text и.т.д

Худший ответ: Называть классы лучше так, чтобы по названию можно было понять что он делает. Длинные имена в общем не проблема. можно попробовать использовать BEM-подход или взять оттуда некоторые принципы и написать собственную методологию. Например у меня все классы делятся на несколько категорий:
row (горизонтальный блок на сайте)
col (делит row на несколько секций)
wrap (оборачивает компонент, который находится внутри col)
item (сам компонент)
text (текст, который находится внутри компонента)
У каждой категории классов есть свой набор свойст которые к нему применяются. Например сетка работает с col-классами и следовательно, когда я вижу класс типа .col-width-50-s, то я знаю что тут структурный стиль для сетки, в котором присваивается ширина 50 процентов на мобилах. А класс item-table_caption это заголовок компонента-таблицы.
Когда в голове создашь свою иерархию классов, то проблем с названием селекторов не будет и их очень легко читать/писать станет.
У такого подхода есть как плюсы, так и минусы.
Плюс - вы берете самые интересные решения из разных методологий и создаете инструмент под себя (мне нравится атомарный подход, mcss и bem, но у всех них есть свои недостатки)
Минус - другие разработчики не всегда могут читать ваш код также легко как и вы. Однако, как показывает практика, методологии приходят и уходят и возможно изобретенный вами подход станет новым стандартом в будущем)
Вопрос: Преобразование массива в объект.?

Лучший ответ: Вообще не нужно ничего конвертировать, это и так уже объект.let x = [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [

], 4, 5], 4, 
[1, 2, 3, [], 4, 5],
5], 4, 5], 4, 5], 4, 5],
[1, 2, 3, [], 4, 5],
 4, 5];

console.log(typeof x) // внезапно "object"в такой объект
UPD: после уточнения задачи:function convert(data) {
	return Array.isArray(data) ? Object.assign({}, data.map(convert)) : data
}
// но там же под капотом все равно перебор

console.log(convert(arr))https://jsfiddle.net/8cLs4601/

Худший ответ: const arr = [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [1, 2, 3, [

], 4, 5], 4, 
[1, 2, 3, [], 4, 5],
5], 4, 5], 4, 5], 4, 5],
[1, 2, 3, [], 4, 5],
 4, 5];

const hash = { data: arr };
Какая задача, такое и решение.
Вопрос: Странное поведение прилипающего header при обновлении страницы?

Лучший ответ: Запускать такие вещи нужно, используя 2 события. Загрузки документа и скрола документа. 
Ведь, если мы обновили страницу где то по середине контента, то блок не прилипнет, ведь у вас он прилипает только при скролинге странце. Делать нужно так:
Либо так:$(window).on('load scroll', function(){
//Скрипт
});
Либо так:function fixedHeaderOnScroll(){
// Ваш код 
}

$(document).on('ready', function(){
fixedHeaderOnScroll();
});

$(window).on('scroll', function(){
fixedHeaderOnScroll();
});
При загрузке страницы не должно и не происходит событие скролла, а значит, ваш скрипт не должен срабатывать. С чего он у вас запускается, для меня загадка. 
P.S. Какой смысл фиксировать блок, если длина скролла больше 1px? Не проще ли сразу зафиксировать блок?

Худший ответ: Смотри в консоли ошибки. Возможно периодически не срабатывает js-скрипт.
Вопрос: Онлайн платформа для хранилища электронных книг?

Лучший ответ: Посмотрите что-то вроде tinyopds и другие варианты OPDS, типа calibreweb. Тогда можно будет практически любой адекватной читалкой сразу их просматривать и скачивать.
Но над вопросом легальности стоит подумать.

Худший ответ: любая cms подойдет.
Вопрос: Есть ли большой туториал для изучения С# desktop + DB?

Лучший ответ: Лучшей книгой для вас будет Эндрю Троелсен "Язык программирования C# 6.0 и платформа .NET 4.6". 
Прекрасная книга для профессионалов, рассказывает обо всём в языке и почти обо всех возможностях и использованиях. В первую очередь, предназначена для программистов, которые уже умеют программировать, но не знают язык C#. В ей всё структурировано на разделы, каждый из них можно читать независимо и использовать как справочник.
У этой книги есть только один недостаток - написана для профессионалов, и автор пишет, как делать, но не пишет, почему так делать - вы и так уже это понимаете, иначе книга стала бы совсем уж гигантской.
Рекомендую взять время и попробовать написать несколько консольных программ на c#, начиная с моего любимого решателя квадратных уравнений :) и работы со списками (простой телефонный справочник). И только после этого начинайте работать с WPF.
А вот очень приличный учебник по wpf:
https://professorweb.ru/my/WPF/base_WPF/level1/inf...
Довольно суховато написано, но с неплохими примерами.
И опять же, рекомендую не начинать делать вашу программу, а сделать с помощью WPF те же программы, которые написали с консолью. И освойтё MVVM.

Худший ответ: Карта специальностей для студента
Идем по .NET общему, потом на UI.
На youtube много уроков где на Rus/Eng языках делают проекты сразу с БД.
Вопрос: Почему застывает загрузка Windows при ее установке?

Лучший ответ: Может быть любая из десятков причин. От фрагменитрованного дистрибутива, битого диска или сбойной памяти, до ... закончилось место на диске или перегрев чего-либо.
Найди журнал установки и смотри, что там записано.

Худший ответ: Скорее всего плохо записанна флешка.
Вариант два - помирает Ваш жесткий диск на компе
Вопрос: Как сравнить два текстовых файла (php скрипты)?

Лучший ответ: https://www.diffchecker.com/
если под рукой ничего нет

Худший ответ: winmerge.org и его вариации https://sourceforge.net/p/winmerge/news/2018/01/a-...
Компаратор в Total Commander https://www.grigsoft.com/art_totcmd.htm сравнивает и локальные файлы и локальные с файлами на удаленном сервере (через ssh)
Оба варианта позволяют править сравниваемые файлы.
Вопрос: Как найти все возможные перестановки с сочетаниями?

Лучший ответ: Построить граф и решать задачу коммивояжера, с модификацией на то, что вам не нужно обходить все вершины и нужны все решения.

Худший ответ: Третий вариант это 1 или 2. :-)
Вопрос: Mikrotik фаервол- не могу избавится от внешних соединений?

Лучший ответ: Очень похоже, что у вас кто-то в сети торренты качает и это входящие подключения от пиров.
https://habrahabr.ru/sandbox/65236/

Худший ответ: Судя по порту это очень похоже на торрент клиент, возможно, transmission. Соединение видимо приходит на ваш внешний ip.
Вопрос: Кто подскажет, где дешевле продление доменов начиная со 2-го года в зоне .ru?

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

Худший ответ: Пока оптимальный вариант с индивидуальными тарифными планами это 2domena.ru . Домены .RU и .РФ регистрация 99 руб. Продление от 151 руб.
Всегда можно договориться с саппортом о стоимости продления и стоимости хостинга.
Вопрос: Data Scientist — как будет по-русски?

Лучший ответ: Статистик
Аналитик-исследователь / аналитик-программист 
Математик-программист
Аналитик данных
Специалист по анализу данных

Худший ответ: Аналитик чаще всего пишут.
Вопрос: Как убрать разделительный знак в последнем элементе цикла foreach?

Лучший ответ: $out = '';

foreach ($crumbs as $item_crumb) {
     $out .= $item_crumb['name'].'/';
}

echo rtrim($out,'/');
Или так$out = [];

foreach ($crumbs as $item_crumb) {
     $out[] = $item_crumb['name'];
}

echo implode('/',$out);

Худший ответ: Я вот так сделал$end_element = array_pop($array);
    foreach ($array as $value) {
       echo $value['name'].'/';
    }
    echo $end_element['name'];
Вопрос: Если зависает VDS где найти логи что бы узнать причину?

Лучший ответ: У меня этот ответ скоро станет стандартным. Наймите админа.
В вашем случае - может обратиться к ТП хостера, вдруг помогут? Может даже и за отдельную денежку....

Худший ответ: Проверьте лимиты ulimit -n.  Часто встречаю низкие значения на серверах с VestaCP.
Вопрос: Как правильно взаимодействовать react+redux+rest api?

Лучший ответ: Придерживайтесь правила, что компоненты не знают ничего о том, что происходит с данными до того момента, когда они попали в компонент в том формате, в котором они ему нужны.
У нас работает так 
1. Вызываем action и получаем данные с rest api в нем же (promise в помощь)
2. передаем данные в reducer
3. получаем данные в контейнер, который отвечает за бизнес логику, в нем же у нас redux connect, обрабатываем данные до формата, который требуется компоненту, тут же mapDispatchToProps со всеми функциями для вызова actions внутри компонента, mapStateToProps - дефолтный state для компонента, как правило содержит isLoading, isError, если action еще не отработал или отработал не верно. Здесь же мы пишем обработчики для мутирования данных
4. Передаем данные в компонент и отображаем их. Больше ничего компонент делать не должен. Вся бизнес логика в контейнере, компонент только отображает/вызывает функции контейнера для мутации данных и вызова actions.
Если вы погружены в react/redux, то вы поймете о чем речь, если нет, вам будет трудно понять о чем я выше написал.

Худший ответ: Подробное описание подходов описано в статье Connecting Redux to your API.
tl;drSummary
To summarize the choices and general trends I’ve found:You may or may not want to store your data in Redux, but if you do, you probably want your request metadata in there tooFor simple apps, imperative fetching might be fine for a while, but declarative approaches are very powerful as you need to sequence asynchronous eventsYou may or may not want to structure your data in normalized form, but there are tools for you to do so if you choose toThere appears to be room for more exploration on the topic of how to structure metadata in your store
In other words, the ways that folks are using Redux to fetch and/or store data from the backend are numerous and we’re spoiled for (or burdened by?) choice at the moment.
Вопрос: Затыки с PDOStatement::execute и MySQL — куда копать?

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

Худший ответ: Таблицы и колонки нельзя биндить, их нужно указывать явно в тексте запроса.
Вопрос: Откуда ошибка в контроллере?

Лучший ответ: статический вызов динамического метода, должно быть $this->getMenuHtml

Худший ответ: во-первых, почему контроллер генерирует html код? Это не правильно.
во-вторых, какое отношение имеет меню к контроллеру User?;
ну, а по теме, вам уже указали, где ошибка - self::getMenuHtml($category['childs'])
Вопрос: Как сделать, чтобы меньшие числа давали больше очков?

Лучший ответ: Буквально ваши правила реализуются подобным JavaScript кодом – с условиями:function getPostScore(time) {
  var diff = Math.floor((new Date()).getTime()/1000) - time;
  if( diff <= 3600) return 50000;
  else if( diff <= 7200) return 25000;
  else if( diff <= 10800) return 10000;
  else return 0;
}

getPostScore(1493487180); // 10000
Но ступенчатость значений, наверное, не вполне оправдана и лучше будет какой-то гладкой функцией. Например, вида y = k / x
С коэффициентом k = 50000 * 3600 она удачно захватывает и вторую точку. Но плоха тем, что ближе к нулю зашкаливает в +бесконечность.
Наверное, для вашей задачи уместнее S-образная кривая – сигмоида, задаваемая формулой вида y = 1 / (1 + e-x)    Примерно подобрал коэффициенты:function getPostSigma(time){
  var diff = Math.floor((new Date()).getTime()/1000) - time;
  return Math.round( 10000 + 40000 / (1 + Math.exp((diff-6800)/700)));
}

getPostSigma(1493531780); // 49998
getPostSigma(1493522780); // 11545

Худший ответ: HIGHEST*exp(-diff/SPEED)
где 
HIGHEST - константа максимального значения очков (за размещение 0 секунд назад)
SPEED - константа скорости убывания 
например,
50000*exp(-diff/4500)
Вопрос: Деградация файлов -- это нормально?

Лучший ответ: Файлы не могут деградировать. Деградировать могут диски, но при этом файлы просто перестают читаться. Если файл прочитался (практически все форматы изображений, видео, музыки имеют контрольный код для сверки), то 99.9999%, что он точно такой же как и раньше.
Либо у вас что-то с софтом, которым вы открываете эти файлы.
Либо, как вариант, может какой-то вирус покоцал файлы, но я не знаю современного вируса, который бы портил их частично. Криптеры просто целиком криптуют.

Худший ответ: Но у меня проблема именно в том, что файлы частично читаются. И я не могу понять почему так происходит. Тем более, что проверка диска проблем не находит.REMAP:Переназначенные сектора – это образовавшиеся во время работы накопителя бэд-блоки, которые накопитель помечает как неиспользуемые (обычно они помещаются в G-List), а на их место подставляет сектора из неадресуемого «резервного» поля. Таким образом, емкость накопителя не уменьшается, накопитель продолжает работать.При переносе данных возможно их искажение.
По поводу восстановления: сейчас легче перекачать файл, чем его ремонтировать. Редакторы, соответствующие типу файла, в большинстве умеют ремонтировать. Старый VirtualDubMod это умел.
Вопрос: Как насчёт того, чтобы выделять сообщения топикстартера?

Лучший ответ: Поддерживаю. Идея не сложная в реализации, но полезная.

Худший ответ: Сделайте как на Хабре - все сообщения топикстартера на подложке слабого цвета.
Вопрос: Почему не работает fill для svg?

Лучший ответ: Надо в path убрать fill="#010202" и тогда класс будет присвоен, иначе он просто его перекрывает.

Худший ответ: Чтобы использовать fill, нужно создать идентификатор или класс на path. <path class="fill-good".../>
А уже потом красить сам path.fill-good {
  fill: red;
}Пример
Вопрос: Как узнать WinAPI функцию?

Лучший ответ: Вообще-то совет "читать MSDN" совершенно правильный. Но есть нюанс - весь MSDN вы, конечно, вряд ли осилите, поэтому я бы рекомендовал пробежаться глазами не по всем функциям API в алфавитном порядке, а по облястям где они применяются.Вот здесь они очень хорошо сгруппированы, плюс в разделе Examples каждой из них вы найдете ссылки на статьи и примеры.
Стоит так же напомнить, что API функции неразрывно идут со структурами, ивентами и макросами.

Худший ответ: https://www.google.com.ua/search?q=msdn+winapi
https://www.google.com.ua/search?q=msdn+winapi+get...
В линуксе ищем библиотеку, которая занимается и делаем man lib_name в консоли
Или читаем исходники библиотеки
Естесственно - можно также гуглить
https://www.google.com.ua/search?q=linux+c%2B%2B+a...
Вопрос: Я правильно написал код по классам и наследованию?

Лучший ответ: В общем все правила прототипного наследования Вы соблюли:
1. Методы вынесены в прототип, свойства определяются в конструкторе
2. Прототип наследника === экземпляр родителя
3. В прототипе присутствует ссылка на текущий конструктор
Одно маленькое замечание, конструктор родителя из конструктора наследника лучше вызывать до манипуляций с this (es2015 классы например вообще не определяют this до вызова super, и правильно делают), вот тут:function SportCar(name) {
  Car.apply(this, arguments);
  this.model = "M3";
  this.speedsp = 200;
  this.enginesp = "V10";
}

Худший ответ: Если напишут, что правильно, будет ли это значить, что ты понял тему и правильно выполнил задание?
Вопрос: Что лучше -- порты, Cygwin, Ubuntu on Windows или дуалбут?

Лучший ответ: не мучать винду и поставить линукс в дуалбут

Худший ответ: виртуалка
дуалбут - не получится одновременно держать приложение и рабочую систему.
Вопрос: Как сверстать такой инпут?

Лучший ответ: input и его абсолютно позиционированный label и все это обернуто в div. 
Либо снаружи label, а внутри span. 
Писать "email adress ..." в псевдоэлемент не целесообразно.
Типа того: https://jsfiddle.net/m7hcbdrj/ цвета, отступы измените, как вам надо

Худший ответ: завернуть input в div и к нему уже применять псевдоэлементы для отображения подписи сверху
Вопрос: Где взять работу специалисту в криптографии/криптоанализе?

Лучший ответ: Дехакать вирусы-шифровальщики?

Худший ответ: В 16 центре.
Вопрос: Как защищать авторские права на код?

Лучший ответ: Как вариант - распечатать исходники или готовый код, вложить в конверт, запечатать оный и отправить себе же заказным письмом, чтобы почта на конверте проставила штемпель с датой. Конверт потом при необходимости предъявить в суде невскрытым. По идее, должно сойти за доказательство первенства, если право попытаются оспорить.

Худший ответ: Точно так же, как и на любое другое произведение — опубликовать.
Вопрос: Чем отличаются пункты «конфигурация компьютера» и «конфигурация пользователя» в локальных политиках безопасности?

Лучший ответ: Грубо говоря: "конфигурация компьютера" меняет ветку HKLM  в реестре, "конфигурация пользователя" - HKCU.

Худший ответ: Конфигурация компьютера относится ко всем пользователям, включая системных пользователей.
Конфигурация пользователя - для конкретного пользователя.
Некоторые опции доступны только для одной области.
Вопрос: Существуют ли в природе реализации блокчейн на PHP от и до?

Лучший ответ: Начните с блокчейн на русском языке, когда дойдет что это - попробуете на языке PHP (впрочем, зачем непонятно).

Худший ответ: В основе блокчейна лежит дерево Merkle. На такой структуре данных уже есть хранилища. Например Amazon Dynamo, Riak.
Реализовывать БД на PHP  - абсурд.
Вопрос: Потянет ли процессор Pentium G1620 виртуальные машины?

Лучший ответ: Потянет (ты же не написал ккакие именно виртуальные машины, какие-то точно потянет).
Какой вопрос такой ответ.

Худший ответ: Это даже не пентиум
https://ark.intel.com/ru/products/71073/Intel-Cele...каковы будут ощущения? как после первого раза)для этих целейКаких целей?
-самому попробовать и прочувствоватьконечно, одно дело смотреть как другие это делают. другое - когда ты сам это делаешь в реальности
Вопрос: UberMenu for wordpress как исправить адаптивность?

Лучший ответ: Правьте стили @media

Худший ответ: Вам нужно прописать стили меню для ширины от 960px до 1389px.
Выглядеть это примерно будет вот так:@media screen (min-width: 960px) and (max-width: 1389px) {
  // стили меню для этого промежутка.
}
Вопрос: Как такое сделать на Angular 2 4?

Лучший ответ: Только руками

Худший ответ: Только руками
Вопрос: Как сделать apk совместимым с другими версиями android?

Лучший ответ: А вопросы зачем дублировать? 
Укажите в манифесте правильные min и target sdk. Если после этого что то не работает - пишите конкретику что и как.

Худший ответ: Android оперирует не major.minor-версиями (типа 4.1.2), а API level'ами (число, порядковый номер версии), в Гугле найдите API level для Android 4.1.2 и поставьте его в minSdkVersion.
Вопрос: Как импортировать xls или csv в MODX?

Лучший ответ: У miniShop2 есть встроенный инструмент импорта из csv:  webcandy.ru/manuals/import-csv-minishop2
Можно не устанавливать minishop, а просто скачать файл https://github.com/bezumkin/miniShop2/blob/master/...
Подходит для импорта любых ресурсов, главное указать нужный class_key.

Худший ответ: Revo или evo?
Для revo хорошее объяснение xPDO тут https://ilyaut.ru/xpdo/
Для evo дока по api modx-gu.ru/api
Вопрос: Как реализовать междоменную авторизацию на Laravel?

Лучший ответ: Просто выдайте клиенту кукисы на несколько ( которые вам нужны ) доменов и все... Это можно сделать редиректами.

Худший ответ: Гляньте в эту сторону: https://habrahabr.ru/sandbox/83851/