• Редирект в apache2?

    @AlexVWill
    Соостветственно нужно
    1 - с www на без www

    Перво-наперво проверь DNS записи регистратора. В них домен второго уровня
    site.ru и субдомен (третьего уровня) www.site.ru должны быть с одним IP.
    Затем в конфиге вируального хоста настрой
    ServerName site.ru
    ServerAlias www.site.ru

    В принципе этого должно хватить, т.е. по обоим адресам будет открываться одно и тоже. Это не редирект пока, но будет открываться одна и та же страница.

    Можно ли его убрать и настроить редирект только через htaccess

    так делать не надо, правильным вариантом является правка конфига виртуального хостинга...

    2 - и c http на https

    для этого тебе нужно получить серитфикат SSL, например через Let's encrypt. Для этого есть такой инструмент - certbot, который получает сертификат и автоматом настраивает редиректы в конфигах апача.
    Он добавляет виртуальный хост
    <VirtualHost *:443>
    - без этого редирект на HTTPS c HTTP работать не будет, и добавляет в раздел
    <VirtualHost *:80>
    правила редиректа
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.site.ru [OR]
    RewriteCond %{SERVER_NAME} =site.ru
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

    Для этого надо чтобы у апаче еще был включен плагин редиректа
    sudo a2enmod rewrite
    sudo service apache2 restart
    Ответ написан
    Комментировать
  • Как Вы загружаете свои сайты в Linux-системах?

    @AlexVWill
    Как Вы передаёте файлы на сервер?

    Просто подключаем удаленную папку /var/www/html как локальную через sshfs и просто в обячном проводнике (любой: Nemo, Nautilus, МС...) копируем папку с данными как локальную... не надо никаких клиентов, никаких заморочек с настройками и все вот это
    https://losst.ru/podklyuchenie-i-nastrojka-sshfs-v...
    Ответ написан
    Комментировать
  • Как ускорить загрузку Linux Ubuntu?

    @AlexVWill
    после перераспределения места в разделах

    Возможно GRUB2 подглючивает... В логах системы ты этого не увидишь, т.к. загрузчик работает еще до старта системы.
    Попробуй в /boot/grub/grub.cfg вставить set debug=all и посмотреть при загрузке, не обрабатывает ли GRUB какую то ошибку, такие ошибки как раз возникают при перераспределении разделов.
    При наличии ошибок возможно, надо будет GRUB2 переустановить, вот тут написано как https://help.ubuntu.ru/wiki/%D0%B2%D0%BE%D1%81%D1%...
    Только надо это делать очень аккуратно, полностью осознавая каждый шаг из того, что ты делаешь.
    Ответ написан
    6 комментариев
  • Как направить определенное приложение через определенный ip средставми iptables?

    @AlexVWill
    через iptables это делать нельзя, т.к. оно не для того предназначено, а через ip netns можно, если я правильно уловил суть задачи
    посмотри вот эту статью, может наведет на нужные мысли? https://habr.com/ru/post/310646/
    Ответ написан
    2 комментария
  • Забыл поставить галочку шифрование при установке linux, как зашифровать уже установленную систему?

    @AlexVWill
    Если это не сервер, то шифруй только раздел /home и swap (если он есть). Позволяет избежать множества гимороя.
    Ответ написан
    Комментировать
  • Как полностью преустановить android studio на Ubuntu 20.04?

    @AlexVWill
    удОли папки /home/user/android, /home/user/.android, /home/user/Android
    Ответ написан
  • Как разграничить ресурсы на сервере по имени поддомена?

    @AlexVWill
    К примеру чтобы по запросу по 80 порту к git.myhost.ru запрос шел на 192.168.0.1:3000 а запрос mart.myhost.ru шел на 192.168.0.1:3001

    Смотря чем ты будешь заходить по указанным адресам. Если браузером и HTTP (т.к. 80 порт), то тебе надо поднимать Apache и настраивать виртуальные хосты, для того чтобы web - server делал редирект в зависимости от того, какой домен запрошен.
    Если чем то другим - то надо в любом случае прописывать маршрутизацию, но стандартные правила маршрутизации подразумевают, что ты будешь всетакие обращаться по IP, т.е. если идет запрос на твой внешний IP 123.123.123.123:80, то маршутизатор передает запрос на 192.168.0.1:3000, а если 123.123.123.123:81 - то на 192.168.0.1:3001
    Это может реализовать какой то продвинутый роутер вроде Mikrotik (или любой с OpenWRT или RouterOS) или LinuxServer + ПроксиСервер, но это какие то все экзотические настройки сети, нужно будет поковыряться с настройками.
    Ответ написан
    Комментировать
  • Как запретить скачивание торрентов на своем VPN сервере?

    @AlexVWill
    Вот как то так:
    https://www.digitalocean.com/community/tutorials/h...
    UFW - это надстройка над iptable, в доступных понятиях это управляющая утилита брандмауэра Linux, служит для открытия и закрытия входящих и исходящих портов. Прочитать ВНИМАТЕЛЬНО, т.к. можно напортачить!!!
    Достаточно оставить открытыми порты 22, 80, 443, ну и те порты, которые используются для почты, мессенджеров. Это на 100% не решит, но поможет.
    Имей ввиду, важна очередность правил, правила работают "сверху вниз", т.е. если есть исключающие друг-друга, сработает первое по списку.
    Ответ написан
    Комментировать
  • Как сделать исключения для wireguard?

    @AlexVWill
    Это делается не на сервере, а на клиенте. Т.к. то, что ушло на сервер, уже не сервере.
    Например, можно настроить клиент на Mikrotik'e, который путем указания правила Mangle будет пускать отдельные сайты на VPN, а все иное гнать мимо VPN, либо (как тебе надо) все гнать в VPN, а отдельные сайты пропускать мимо.
    Либо в клиенте на Ubuntu настроить таблицы маршрутизации, которые будут пускать отдельные страницы другим маршрутом, а не через VPN. Можно попробовать сделать это командой:
    route add webservices.example.com mask 255.255.255.255 192.168.1.0

    Где 192.168.1.0 - адрес роутера.
    Ответ написан
  • Неприемлемые учётные данные проверки подлинности IKE, что не так?

    @AlexVWill
    Поскольку винда использует штатный VPN коннектор и хранилище сертификатов, то надо правильно сертификат добавить. Вот тут написано как (инструкция проверенная и рабочая): https://www.digitalocean.com/community/tutorials/h...
    Ответ написан
    Комментировать
  • Как отправить POST запрос на Android?

    @AlexVWill
    отправить POST запрос на Android

    А точно POST запрос НА Android, а не С Android? Если надо именно НА, то надо понимать, что на смартфоне должна быть установлена некая программа web - сервер, которая будет отвечать на запрос.
    Если же надо направить С, то это делается обычными способами, по гуглю есть куча иформации и библиотек, как это можно сделать. API нужен не на смартфоне, а на сервере, который будет реагировать на подобный запрос. И таки да, если API есть, то нужно читать мануал к конкретному API как с ним работать.
    В общем вопрос непонятен, попробуй его грамотно сформулировать.
    Ответ написан
    Комментировать
  • Как исправить утечку dns на роутере?

    @AlexVWill
    Посмотри на роутере какие сервера DNS настроены. Настрой на 8.8.8.8 и 8.8.4.4
    При этом, сними галку с "Use peer DNS" (не знаю как оно в кинетике называется). При этом, посмотри в клиенте OpenVPN, не стоит ли где то DNS провайдера. На всякий случай настрой на 8.8.8.8 и 8.8.4.4
    Ну и настрой на DoH по возможности: https://dns.google/dns-query
    Ответ написан
    2 комментария
  • Установить linux на игровой ноутбук asus, как исправить проблему в драйверами?

    @AlexVWill
    Если есть проблема с установкой Ubuntu, то пиши лучше сюда: https://forum.ubuntu.ru/index.php?board=56.0
    В вопросе четко, кратко и понятно указать:
    - версию ОС
    - модель ноута
    - характер проблем
    - конфигурацию оборудования, с которым есть проблемы
    - что уже предпринималось для решения
    Ответ написан
  • Snap безопаснее Apt?

    @AlexVWill
    Нет, это не так. Основное отличие (которое обычному пользователю скорее всего не видно) это то, что apt как конструктор из кубиков собирает все необходимые компоненты для работы приложений (зависимости) из разных источников, в то время как snap более похож на дистрибутив, т.е. все нужное лежит в одном пакете.
    И то, и другое имеет как плюсы и минусы. Минус snap в том, что обычно он больше места требует для работы приложений.
    Ответ написан
    Комментировать
  • Как сделать пуш уведомление для определенной категории людей?

    @AlexVWill
    каждый девайс, зарегистрированный в системе push уведомлений Firebase имеет свой уникальный токен, который получается примерно как то так:

    private void getFirebaseToken() {
            FirebaseMessaging.getInstance().getToken()
                    .addOnCompleteListener(new OnCompleteListener<String>() {
                       
                        @Override
                        public void onComplete(@NonNull Task<String> task) {
                            if (task.isSuccessful()) {
                                // Get new FCM registration token
                                // Log and toast
                                fbtoken = task.getResult();
                                handleFirebaseResult();
                                //Log.d("Firebase id", fbid);
                                //Log.d("Firebase token", fbtoken);
                            }
                        }
                        private void sendRegistrationToServer() {
                            // TODO: Implement this method to send token to your app server.
                        }
                    });
        }

    По сути, все что надо - это собрать в базу данных токены тех устройств, которые соответствуют твоим условиям (например, указали при регистрации нужный пол или возраст), и дальше посылать уведомления только для них по нужному токену.
    Ответ написан
    3 комментария
  • Почему зависает приложение?

    @AlexVWill
    Нельзя делать в приложении бесконечные циклы, тем более в UI, система принимает такие приложения за зависшие (что, по сути и является) и принудительно закрывает их. Проверку лучше делать однократно, непосредственно пред исполнением нужного кода например вот так:

    boolean connected = false;
    ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
                connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
            //we are connected to a network
            connected = true;
        }
        else
            connected = false;
    Ответ написан
  • Как с начала загрузить список, а затем его обновлять с помощью SwipeRefreshLayout?

    @AlexVWill
    Второй случай явно неправильный, т.к. всетаки сначала должен загружаться список, а потом он должнен по свайпу обновляться. Поэтому ты ничего и не видишь, т.к. формирование списка происходит не вначале, а после срабатывания листенера setOnRefreshListener на элементе mSwipeRefreshLayout.
    Почему не работает вывод списка в первом случае - х.з., т.к. код ты скрыл (что за дурацкая привычка?), а телепаты все разъехались на Бали прочищать свои чакры.
    Но если там какой то RecyclerViever, то это работает приблизительно как то так:
    spoiler

    RecyclerView historyRecyclerView = binding.adrecyclerView;
            historyRecyclerView = historyRecyclerView.findViewById(R.id.adrecycler_view);
            HistoryViewRecycler historyView = new HistoryViewRecycler();
            historyView.initRecycler(historyRecyclerView);
    
            swipeRefreshLayout = binding.swipeRefreshLayout.findViewById(R.id.swipeRefreshLayout);
            swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    //make new recycle view on swipe refresh
                    RecyclerView newhistoryRecyclerView = binding.adrecyclerView;
                    HistoryViewRecycler newhistoryView = new HistoryViewRecycler();
                    JSONArray newhistory = new HistoryViewRecycler().updateHistory(getContext());
                    if (newhistory == null) {
                        new History().getFullHistory(getContext());
                        //Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.auth_error, 3000).setDuration(5000).show();
                    }
                    newhistoryView.initRecycler(newhistoryRecyclerView);
                    swipeRefreshLayout.setRefreshing(false);
                }
            });


    Не претендую на исключительность кода, это просто для примера.
    У тебя же в коде onRefresh() никакого обновления списка нет, кроме остановки кручения индикатора... ну и с какого перепугу он должен что-то там обновлять?
    Размести тогда уж код формирования списка в обоих разделах (как бы 1+2 пример совмести) и посмотри что получится.
    Ответ написан
    1 комментарий
  • Как добавить много текста в одну Activity?

    @AlexVWill
    Либо так: https://metanit.com/java/android/9.1.php
    Либо так: https://metanit.com/java/android/3.11.php
    Если данные в виде списка повторяющихся однородных элементов бесконечной длины, то гугли RecyclerView
    Ответ написан
    Комментировать