Konfiguracja .htaccess

Strona-wizytówka w końcu nabiera kształtu. Pozbyłem się rozszerzenia .html. Mam certyfikat i przekierowanie na https.
ALE…
Wydrukowałem wizytówki na których zamieściłem ładny odnośnik do strony kontraktowej wilamowski.it/contact. Było OK, dopóki nie zmieniłem konwencji strony i małe samodzielnie podstrony trochę zaczeły mi się gryźć z resztą. Dla ustandaryzowania i łatwiejszego zarządzania moją witryną przerzuciłem strone kontaktową do CMS. Niestety jako, że index.html jest statystyczny, a WP znajduję się w podkatalogu blog to…

  • primo odnośnik z wizytówki stał się nieaktualny,
  • secundo, nowy jest długi i nieuntuicyjny, po prostu brzydki

Z pomocą przychodzi prosty redirect z adresu wilamowski.it na właściwą stronę.
Redirect 301 „/contact” /blog/?page_id=291″

Teraz wpisując wilamowski.it/contact lecimy na stronę stworzoną WP.
Wygląda lepiej.

Przykład prostej konfiguracji:

 

 

kraszewska.vet – projekt strony WWW i wizytówki

Lekka strona napisana dla lekarza weterynarii + projekt wizytówek.
Gratisowy hosting miał ograniczenie do jednej strony, więc linki prowadzą (#) do sekcji (div). 

2020-02-04 Aktualizacja

Strona przeniesiona na płatny hosting OVH z WordPressem.
Dodałem certyfikat SSL dla bezpieczeństwa i lepszego SEO.
Blog podpięty dla wypozycjonowania strony przez „content”.


Stack:

  • HTML&CSS (home page)
  • WordPress (blog)
  • JS (tylko do formularza Formspree oraz przycisku powrotu na górę strony)

Features:

  • formularz kontaktowy
  • mapa Google z lokalizacją
  • integracja z Kalendarzem Google (pacjenci mogą sprawdzić na stronie godziny przyjmowania, dużym plusem jest to że zmiana godzin nie wymaga ingerencji w kod czy CMSa – można tego dokonać w intuicyjny sposób w Kalendarzu Google z telefonu lub komputera)
  • Google Analitycs

ToDo:

  • koniecznie responsywność/wersja mobilna !
  • delikatne tło strony – pattern

Lekarz weterynarii we Włocławku
https://kraszewska.vet

Przyjazne linki – jak usunąć rozszerzenie z linku?

Przyjazny link to taki, która jest w przystępny dla typowego konsumenta sieci. Bez zbędnych informatycznych niuansów.
W tym przypadku chcemy ocieplić wizerunek nie tylko SEO, ale również klienta, pozbywając się rozszerzeń w linkach.
wilamowski.it/contact prezentuje się znacznie lepiej bez rozszerzenia (contact).html.

By tego dokonać musimy skonfigurować serwer aplikacyjny Apache. W katalogu root (np. /var/www/) tworzymy plik o nazwie .htaccess. Każdy taki plik od góry w hierarchii folderów jest czytany oddziałuje na foldery na dole.
Wklejamy do utworzonego poniższą konfiguracje.

Gdyby apache nie czytał pliku htaccess sprawdzamy w /etc/httpd/conf/ sekcja „# Relax access to content within /var/www.”
Jeśli istnieje „AllowOverride none” to zmieniamy na „AllowOverride All”

Na koniec resetujemy usługe:
systemctl restart httpd

PS W skrypcie korzystamy z mod_rewrite, w razie problemów przeprowadzić diagnostyke*.

Linki:
Diagnostyka – https://docs.bolt.cm/3.7/howto/making-sure-htaccess-works#test-if-htaccess-is-working
W pigułce o htaccess https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04

JDBC w 5 minut

JDBC (Java Database Connector) to niskopoziomowe operacje na bazie danych przy pomocy sterownika producenta.
Daje większe możliwości niż popularne frameworki wykorzystujące mapowanie obiektowo-relacyjne, jednak obsługa zapytań odbywa się większym nakładem pracy. Warto zacząć od nich nauke, bo bywają przydatne tam gdzie ORM nie dają rady 🙂

Tworzymy klasę  do połączenia z bazą stosując wzorzec Singleton. Dlaczego zastosujemy ten wzorzec? Potrzebujemy tylko jednej instancji tego obiektu, więc tworzymy prywatny konstruktor.

Obiekt stworzymy przy użyciu statycznej (czyli nie potrzebującej obiektu) metody. Tworzymy też warunek, w którym sprawdzamy czy obiekt istnieje.

Wczytujemy parametry połączenia z naszego pliku db.properties* do zmiennych przy użyciu FileReader

I rejestrujemy sterownik przy pomocy Class.forName oraz przekazujemy DriverManager.getConnection ze szczegółami połączenia do obiektu connection.

Zwracamy obiekt

*zawartość pliku db.properties

Ważne: nie zapominamy o dołączeniu sterownika bazy Oracle w IDE Intelij IDEA.
https://wilamowski.it/index.php/2019/07/28/how-to-import-jdbc-oracle-driver-to-intelij-idea-project-ojdbc6-jar/

 

Przejdźmy do klasy testowej. Tworzymy obiekt  connection przy pomocy metody statycznej:

Do wykonania zapytania SQL i połączenia z bazą tworzymy obiekt statement (interfejs Statement, java.sql). Potrzebny nam jest do wysłania zapytania do bazy. PS Jeżeli potrzebujemy zapytań zparametryzowanych lub zapytanie będzie używane wielokrotnie warto zainteresować się PreparedStatment.

Metoda executeQuery zwraca wynik zapytania. W tym samym momencie może być otwarty jeden Statement i jeden ResultSet.

Mapujemy encje i wyświetlamy rezultat wiersz po wierszu (.next() zwraca wartość logiczną)


 —————————————————–

Projekt przedstawiający przykład połączenia z plikiem parametrów wzorcem singleton i prostym zapytaniem. Myślę, że dobrze to ukazuje idee bez zbędnego kodu

https://github.com/connoisseur0/JDBC-example

Source:
1. https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html#creating_statements
2. https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html

 

Tworzenie użytkownika i nadanie uprawnień użytkownikowi bazy

Tworzenie użytkownika bazy Oracle:

Nadanie uprawnień użytkownikowi:

Typowe role dla połączenia i tworzenia obiektów w swoim schemacie:
CONNECT, RESOURCE

Uprawnienia do wszystkich tabel.
Stwórzmy role support:
create role support;
Następnie dodajmy do niej prawa

Uprawnienia do wszystkich obiektów w poleceniu

Przykład:
GRANT support TO test2;

Podgląd uprawnień w widokach
user_sys_privs dla uzytkownika:

dla usera sys:

src: http://www.nazmulhuda.info/grant-select-on-all-tables-in-a-specific-schema-to-a-user

Procedura PL/SQL wyliczająca wartość kolumny B na podstawie kolumny A

Cel: Wyliczenie kolumny Bna podstawie wartości z kolumny tabeli z dla wszystkich wierszy.
Kontekst: Hurtownia danych. Tabela faktów zawiera już przeliczony wiek pacjenta, dodałem jeszcze jeszcze jedną kolumne GRUPA_WIEK aby wstawić w nią klucz obcy do mini wymiaru zawierającego grupy wiekowe.
Uwaga: złamana 3 postać normalna, kolumna jest zależna od drugiej.

Krótki wywód o poszukiwaniu optymalnej długości typu danych. Część 1 – atrybut NAZWISKO.

Weźmy pod lupę atrybut NAZWISKO.
varchar2(30), (50), (100) a dlaczego nie(4000)? (https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1145132537055)

Używając poniższych zapytań, po przebrnięciu przez masę kwiatków dobrnąłem do elitarnego grona ludzi z najdłuższymi nazwiskami w „mojej” bazie. Znalazłem obcokrajowca z 29 znakami w tym trzema białymi.
Najdłuższe polskie to kombinacje dwóch nazwisk z myślnikiem i jedno ze spójnikiem „vel”. Natomiast jeśli chodzi o imiona to dość popularne są podwójne co oznacza dla nas ponad 20 znaków.
Nieźle. Ale co mówią statystyki?
Znalazłem panią Achmistrowicz-Wachmistrowicz. Idąc tym tropem, zrobiłem szybki research na portalach genealogicznych. Podpowiadają one nazwiska 15 znakowe, co potencjalnie daje szanse na uzasadnione varchar2(31) …
Bezpieczna wartoscia biorac pod uwage obcokrajowcow bedzie 100.

Klucz obcy odwołujący się do tej samej tabeli

Co zrobić w sytuacji gdy w tabeli Pracownicy masz mieć zawartą informacje o przełożonym tej osoby? Przeciez przełożony jest też pracownikiem. Nie trzeba tworzyć zawiłych redundatnych konstrukcji, z pomocą przychodzi rekurencja – możemy odwołać się do tej samej encji.