Przekierowanie adresu url przy pomocy pliku .htaccess

Czasami potrzeba przekierować url naszej domeny na inny adres (np. gdy chcemy przekierowywać zaindeksowane przez google, nieaktywne pliki na poprawne)

W głównym korzeniu aplikacji www (tam gdzie wskazuje zmienna DocumentRoot w VirtualHost konfiguracji domeny na serwerze Apache2) tworzymy plik .htaccess i wpisujemy do niego:

Redirect 301 /katalog/plik.html https://domena.tld/katalog2/plik.html
Wyjaśnienie:

/katalog/plik.html (to część adresu url po nazwie domeny, który trzeba przekierować)

https://domena.tld/katalog2/plik.html (nowy adres na który wskazuje przekierowanie)

Czasami trzeba przekierować adres który wskazuje na katalog/kategorię na nowy adres

Wtedy wpisujemy:

Redirect 301 /katalog/?$ https://domena.tld/katalog2/plik.html

Przekierowanie adresu url w Apache VirtualHost

Przekierowanie adresu z protokołu niezaszyfrowanego na szyfrowany przy użyciu VirtualHost w Apache (Ubuntu 16.04).

Edytujemy plik, który wskazuje na konfigurację niezaszyfrowaną (port 80)

/etc/apache2/site-enabled/domena.tld.conf

i pod koniec sekcji dodajemy

RewriteEngine on
	RewriteCond %{SERVER_NAME} =domena.tld [OR]
	RewriteCond %{SERVER_NAME} =www.domena.tld
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

lub inny sposób

RewriteEngine On
	RewriteCond %{HTTPS} !on
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Zapisujemy plik i restartujemy serwer Apache

systemctl restart apache2

Taka konfiguracja pozwoli nam przekierować cały ruch na szyfrowany protokół https (port 443) jeśli w przeglądarce wpiszemy domena.tld lub www.domena.tld

Ile czasu działa program?

Jeśli chcemy sprawdzić jaki czas temu został uruchomiony program to można to zrobić na kilka sposobów.

Pierwszy dotyczy kombinacji narzędzi pidof i ps, a drugi kombinacji narzędzi pidof i ls.

Rozwiązanie 1 - kombinacja narzędzi pidof i ps

W shellu wpisujemy pidof firefox.

pidof firefox

Wyświetla się lista wszystkich pid-ów procesów firefoxa. Wybieramy o najniższej wartości po czym używamy narzędzia ps

ps -p TWÓJ_PID -o args,etime,lstart

<h3>Wyjaśnienie opcji narzędzia ps:</h3>

-p TWÓJ_PID (należy podać pid programu)

-o args (wyświetli się scieżka do programu)

-o etime (jak długo uruchomiony jest program)

-o lstart (początek uruchomienia programu)

Rozwiązanie 2 - kombinacja narzędzia pidof i ls

W shellu wpisujemy pidof firefox.

pidof firefox

Wyświetla się lista wszystkich pid-ów procesów firefoxa. Wybieramy o najniższej wartości po czym używamy narzędzia ls

ls -ld /proc/twój_PID

W wyniku sprawdzamy kolumnę z datą i czasem

Usprawnienia dla logowania po ssh

Jeśli mamy wiele serwerów i musimy często się na nie logować to można sobie taką czynność uprościć. Pierwsza sprawa to wyłączenie logowania po haśle i logowanie przy pomocy kluczy.

Druga to utworzenie pliku ~/.ssh/config i wpisanie wszystkich hostów na które będziemy się logować. Struktura takiego pliku to np:

Host mail
Hostname x.x.x.x
user jakislogin
Port 22
TCPKeepAlive yes

Autoresponder dla kont pocztowych

W "najsurowszej" kombinacji usług pocztowych (postfix+dovecot+amavisd) dzięki którym możemy stworzyć własny system pocztowy nie ma funkcji autorespondera.

Możemy szybko taką funkcję dodać do wspomnianej konfiguracji.

W systemie Ubuntu instalujemy paczkę vacation.

Pliki, które są istotne

~/.vacation.db   plik bazy tworzony podczas inicjalizacji.
~/.vacation.msg  plik wiadomości autorepondera
~/.forward plik dzięki któremu przekazujemy otrzymaną pocztę do aplikacji vacation
~

Tylda oznacza katalog domowy użytkownika. Czyli jak konto jest user1@domena.net to wspomniane pliki muszą znajdować się w lokalizacji (przy założeniu, że system pocztowy opiera się na zwykłych kontach systemu operacyjnego ):

/home/user1

Tworzymy wspomniane pliki i wypełniamy treścią:

plik ~/.forward zawiera

\user1, "|/usr/bin/vacation -a user1@domena.net"

plik ~/.vacation.msg zawiera

MIME-Version: 1.0
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit
Subject: [Autoresponder] Urlop

Dziękuje za wiadomość. W dniach 19/02/2018 - 28/02/2018 jestem nieobecny w biurze. Na wszystkie wiadomości odpowiem po powrocie.

Wyjaśnienie:

Pierwsze 3 linie są potrzebne po to aby w kliencie pocztowym odbiorców treść autorespondera wyświetlała polskie znaki (2 linia). Jeśli używasz tylko języka angielskiego to te 3 linie nie są wymagane. Czasami serwery pocztowe są tak skonfigurowane, że jak nie ma odpowiednich nagłówków we wiadomości to podnoszą ryzyko wystąpienia jako spam. Więc warto tworzyć właściwą kopertę wiadomości.

Wystarczy teraz tylko wydać polecenie

vacation -i

i wszystko co przychodzi na konto pocztowe user1@domena.net jest domyślnie raz na dobę odbijane do nadawcy treścią z pliku .vacation.msg

Przycięcie ścieżki dźwiękowej

'FFMPEG"

Czasami trzeba wyciąć pewien odcinek dźwięku z określonej ścieżki dźwiękowej. Zrobimy to narzędziem ffmpeg.

fmpeg -ss 00:00:01 -t 00:01:00 -i wejsciowy-plik.mp3 wyjsciowy-plik.mp3

Wyjaśnienie opcji:

-ss (początek wycięcia względem ścieżki dźwiękowej)

-t (koniec wycięcia względem ścieżki dźwiękowej)

Powstanie nowy plik z 1 - minutową ścieżką dźwiękową

Strona projektu: https://ffmpeg.org

Czytanie pliku w skrypcie linia po linii

'Bash'

Bardzo często trzeba w skryptach bash czytać pliki linia po linii i coś z tymi liniami robić. Bash posiada dwie pętle, które się do tego zadania nadają.

for .. in .. ;do .. done

i

while .. ;do .. done

Rozwiązanie dla pętli for

nIFS=$IFS
IFS=$(echo -ne "\n\b")
        for i in $(cat plik.txt);do
                echo $i
        done
IFS=$nIFS

Rozwiązanie dla pętli while

while read i;do
        echo $i
done < plik.txt

Skrypt sprawdzający kiedy wygaśnie domena

'Bash'

Dla Debiana/Ubuntu/Minta sprawdzamy czy mamy zainstalowany whois wydając w shellu polecenie

[ -f '/usr/bin/whois' ] && echo Zainstalowany || apt-get -y install whois
#!/bin/bash
dzis=$(date +%Y%m%d)
whois='/usr/bin/whois'
declare -a domeny='satkas.waw.pl
        jakasinnadomena1.tld
        jakasinnadomena2.tld'
function sprawdz {
        local red=`tput setaf 1`
        local reset=`tput sgr0`
        local koncowka=${i##*.}
        if [ $koncowka == "com" ]
        then
                wynik=$( whois $i |grep "Registry Expiry Date" |tr  -d '[:blank:]'|cut -d':' -f2)
                wynik2=${wynik:0:10}
                wynik3=$(echo $wynik2 |tr -d '-')
                roznica=$(( ($(date --date=$wynik3 +%s) - $(date --date=$dzis +%s) )/(60*60*24) ))
                [$roznica -lt 30 ] && echo "$red ALARM dla domeny $i pozostało $roznica dni   $reset" || echo "$i: Pozostało $roznica dni"
        elif [ $koncowka == "pl" ]
        then
                wynik=$( whois $i |grep "renewal" |tr  -d '[:blank:]'|cut -d':' -f2)
                wynik2=${wynik:0:10}
                wynik3=$(echo $wynik2 |tr -d '.')
                roznica=$(( ($(date --date=$wynik3 +%s) - $(date --date=$dzis +%s) )/(60*60*24) ))
                [ $roznica -lt 30 ] && echo "$red ALARM dla domeny $i pozostało $roznica dni      $reset" || echo "$i: Pozostało $roznica dni"
        else
                echo "Posiadasz domenę która nie odpowiada masce .pl i .com"
        fi
}
for i in $domeny
do
        sprawdz
done

Pod zmienną tablicową $domeny podstawiamy własne domeny. Pamiętać należy, że główny KRD (Krajowy Rejestr Domen) nakłada limit zapytań do bazy z jednego IP (limit ten to chyba 100 zapytań na dobę)