dec 16, 2024

SSL i XamPP

Hvis du har fået Virtual Host til at fungere, så er websiden stadigt usikker, og det er fordi at den benytter sig af http – protokollen som lytter på port 80. Det er muligt at oprette en sikkerhedscertifikat og tilhørende nøgle på XamPP, men det kun til den lokale maskine. Man kan ikke bruge det på et webhotel. Det skal konfigureres af webhotellets administration, eller ved brug af WordPress, så et SSL plugin.

I Apache findes der en bat-fil, hvor man kan oprette certifikat og nøgle, men desværre mangler der mulighed for at specificere domæner. Batfilen ser således ud.
 
@echo off
set OPENSSL_CONF=./conf/openssl.cnf

if not exist .\conf\ssl.crt mkdir .\conf\ssl.crt
if not exist .\conf\ssl.key mkdir .\conf\ssl.key

bin\openssl req -new -out server.csr
bin\openssl rsa -in privkey.pem -out server.key
bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365

set OPENSSL_CONF=
del .rnd
del privkey.pem
del server.csr

move /y server.crt .\conf\ssl.crt
move /y server.key .\conf\ssl.key

echo.
echo -----
echo Das Zertifikat wurde erstellt.
echo The certificate was provided.
echo.
pause
 
Der mangler at læse ind en parameter, der angiver tilknytning mellem DNS og adresserne. Dette skal opbevares i en fil. en fil ved navn V3.ext

og desuden ønsker vi at certifikatet gælder lidt længrere end i et år. Vi kan bruge hvilket som helst antal dage, men jeg har valgt 1825, ca 5 år. Batfilen skal vide, at den skal læse en ext-fil ind, så derfor tilføjer vi -extfile v3.ext, så bin\openssl x509  – linjen laver vi om som følger:

bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 1825 -extfile v3.ext

Oplysningerne om domæne i v3.ext filen skal se ud som følger ( vores tilfælde)
 
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage =digitalSignature, nonRepudiation, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = *.dev.kfmh.dk
DNS.3 = dev.kfmh.dk
DNS.4 = 127.0.0.1
DNS.5 = 127.0.0.2
 
Gem denne fil  og den ændrede batfil – og kør batfilen. Når man gør det, skal man angive en adgangskode. Det skal være en, der er let at huske, for den får man brug for senere. Derefter beder programmet om forskellige oplysninger, som er lige ud ad landevejen, indtil man kommer til angivelse af navn. Her skal man skrive det domæne, som skal gøres sikkert. I vores tilfælde bliver det dev.kfmh.dk. Alle oplysningerne skal stå som ovenstående. En lille trykfejl vil resultere i at vi ikke får genereret det rigtige certifikat og eller, at Apache ikke starter op ved genstart, men går i fejl.  Hvis alt dette går godt, så skal en virtual host med port 443 oprettes.

 

Vi opretter en ny virtual host, som følger
 
<VirtualHost *:443>
   ServerAdmin webmaster@dev.kfmh.dk
      DocumentRoot "/xampp/apps/xampp-portable-windows-x64-8.2.12-0-VS16/xampp/htdocs/kfmh"
   ServerName dev.kfmh.dk
   ServerAlias kfmh
   ErrorLog "logs/dev.kfmh.dk-error.log"
   CustomLog "logs/dev.kfmh.dk-access.log" common
   SSLEngine on
   SSLCertificateFile "conf\ssl.crt\server.crt"
   SSLCertificateKeyFile "conf\ssl.key\server.key"
   ##check with openssl req –noout –text –in dev.kfmh.dk.csr
</VirtualHost>
 
Så gemmer man filen, og genstarter Apache serveren. Og hvis den går i fejl, kan der være en trykfejl

Når man opretter et certifikat ved makecert.bat så bliver certifikatet lagt i en fil med stien “conf\ssl.crt\server.crt” og nøglen i stien
conf\ssl.key\server.key” For at få det hele til at virke skal man så specificere SSLEngine on og så de to filnavne som i det grøn-markerede linjer i ovenstående definition af Virtual Host. Memh.dk n hvis den virker korrekt, og man taster https://dev.kfmh.dk i browserens adressefelt, så  burde man komme til siden via port 443 som en sikker forbindelse.

Herefter mangler vi kun at sørge for at vi altid lander på https siden. Og det skal vi gøre i den virtuelle host for port 80. Vi tilføjer linjer  så specifikationen for de virtuelle host er som følger:
 

<VirtualHost *:80>
    ServerAdmin webmaster@dev.kfmh.dk
    DocumentRoot "/xampp/apps/xampp-portable-windows-x64-8.2.12-0-VS16/xampp/htdocs/kfmh"
    ServerName dev.kfmh.dk
    ServerAlias kfmh
    ErrorLog "logs/dev.kfmh.dk-error.log"
    CustomLog "logs/dev.kfmh.dk-access.log" common
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.dev.kfmh.dk [OR]
    RewriteCond %{SERVER_NAME} =dev.kfmh.dk 
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}[END,NE,R=permanent]
</VirtualHost>

 
Vi skal omdirigere alle forespørgsler via www.dev.kfmh.dk og dev.kfmh.dk, som jo går via http og port 80 til at blive omdirigeret til https serveren. Først starter man RewriteEngine, så specificerer man tilfældene, hvor der skal omdirigeres, og til sidst en RewriteRule som siger at de skal gå via https. Specielt de grønne linjer skal stå præcist sådan, for ellers kan man ikke genstarte Apache.
 
Så gemmer man filen, og genstarter Apache serveren. Og hvis den går i fejl, kan der være en trykfejl.
 
Men hvis man kommer igennem, så skulle dev.kfmh.dk altid vises som en sikker forbindelse via SSL.

More Details
dec 16, 2024

Virtual Host på portabel XamPP

Når man har anskaffet sig XamPP server på et USB stik til at oprette et udviklingsmiljø for hjemmesider, vil man jo gerne have, at web-adressen ligner den, som den hjemmeside, der kører på et webhotel med en sikker forbindelse.

Hvis fx den hedder kfmh.dk, ligger det nærved at kalde den lokale dev.kfmh.dk (som de 3 første bogstaver i “developing”). Da XamPP er født med enten “localhost” eller 127.0.0.1, skal opsætningen ændres.

Dette gøres ved at oprette en såkaldt virtual host. Og hvis man vil installere WordPress med den adresse, – så er det nok bedst at foretage oprettelsen af den virtuelle server først og derefter installere WordPress med den nye adresse. Ellers skal man ind i WordPress-databasen og ind i tabel Options for at rette siteurl og home adresserne til virtual host adressen.

 

Virtual host

For at oprette en virtuel server i XamPP skal man ind mappen \xampp\apache\conf\extra og åbne filen httpd-vhosts.conf med et editeringsprogram, fx Notepad++

I denne fil står der 2 eksempler til virtualhost, og den sidste som følger:

##<VirtualHost *:80>
##   ServerAdmin webmaster@dummy-host2.example.com
##   DocumentRoot "/xampp/apps/xampp-portable-windows-x64-8.2.12-0-VS16/xampp/htdocs/dummy-host2.example.com"
##   ServerName dummy-host2.example.com
##   ErrorLog "logs/dummy-host2.example.com-error.log"
##   CustomLog "logs/dummy-host2.example.com-access.log" common
##</VirtualHost>

I dette eksempel skal du så ændre, så det passer til din installations indstillinger og din virtuelle serveradresse. Her vil vi bruge dev.kfmh.dk som serveradresse (eller den virtuelle server), og dokument roden bliver så htdocs/kfmh. Og fden virtuelle host kommer så til at se ud som følger:

<VirtualHost *:80>
ServerAdmin webmaster@dev.kfmh.dk
DocumentRoot "/xampp/apps/xampp-portable-windows-x64-8.2.12-0-VS16/xampp/htdocs/kfmh"
ServerName dev.kfmh.dk
ServerAlias kfmh
ErrorLog "logs/dev.kfmh.dk-error.log"
CustomLog "logs/dev.kfmh.dk-access.log" common
</VirtualHost>

Her er ServerAlias valgfrit. For Windows (10 eller 11) skal vi fortælle Windows at vi bruger en ny server. Det vil sige, at vi skal opdatere Windowsfilen hosts med den nye server. Denne fil findes i C:\Windows\System32\drivers\etc. Denne fil kan åbnes med Notepad++, som skal have administrationsrettigheder. Filen indeholder tilknytninger af IP-adresser til værtsnavne. Og til at starte med indeholder den tilknytning af 127.0.0.1 til localhost, hvilket angives som følger:

127.0.0.1       localhost

Nu tilføjer vi så to linjer, en, der er tiltænkt KFMH, og en til Spillefolk.dk, sådan at der i alt står:

127.0.0.1       localhost
127.0.0.1       dev.kfmh.dk
127.0.0.1       dev.spillefolk.dk

 

Hvor vi så har tilknyttet to nye navne til 127.0.0.1, – gemt filen (husk administratorrettigheder). For at få de nye indstillinger til at træde i kraft skal man genstarte Apache serveren, og så kan man åbne siden med adressen dev.kfmh.dk. Hvis du har lavet en trykfejl, så kan du ikke starte Apache serveren, men får i stedet for en fejlmeddelelse. Dette stammer mest fra trykfejl i angivelsen af VirtualHost.

 

Hvis du var så uheldig, at have installeret WordPress, først skal du måske ind i tabel option for at rette i adressen for række, siteurl og række home fra localhost/kfmh til http://dev.kfmh.dk i modsat fald får man et mærkeligt resultat, når man indtaster dev.kfmh.dk i browseren.

 

Når man er færdig, så burde WordPress siden vises korrekt.

More Details
okt 17, 2024

WordPress tips

Når man opretter en ny post type, så laver man en funktion i filen functions.php, fx. som i undervsiningen hedder University_post_types:

function university_post_types(){
     register_post_type('event',array(
                    ‘show_in_rest => true,
        'public' => true,
        'menu_icon' => 'dashicons-calendar',
        'labels' => array(
     'add_new' => 'Add New Event',
        'name' => 'Events',
        'add_new_item' => 'Add New Event',
        'edit_item' => 'Edit Event',
        'all_items' => 'All Events',
        'singular_name' => 'Event'
                   )
     ));
}
add_action('init','university_post_types');

Den første i array Labels sørger for at der i menuen admin står ‘Add New Event’ i stedet for ‘Add New Post’

Man registrerer herved sin post type, og en event skal have en kalender ikon, og navnet i for denne post type er event, og navnet for typen i WordPress kontrolpanel bliver Events.

Notér at egenskaben ‘show_in_rest’ => true er for at gøre bruger oprettet post tilgængelig for REST API, dette bruges senere i kurset

For at vores nye definition er uafhængig af skift af tema og deaktivering af plugin. så sætter vi en ‘MUST-USE-PLUGINS’ til. Det gør vi ved at oprette en ny mappe under content, som skal hedde mu-plugins

I denne mappe placerer vi både funktion og hook. Og i dette tilfælde kan vi så bruge post af typen event uafhængigt af tema eller plugin

More Details
okt 14, 2024

WP-funktioner og hvad de gør

 

Funktion Hvad den gør bemærkninger
site_url(‘/relative_url’) henter adressen  til en specifik under-adresse
have_posts() while (have_posts()),  sålænge der er flere poster Noter i single, er er nøjagtig een post
the_permalink() : Indsætter link til en side eller indlæg i loopen link til side eller indlæg, bruger single.php
the_title() indsætter titlen på siden eller indlægget Både single og posts/pages
the_content(); Indholdet af siden eller posten fortrinsvis single.php
get_header() Henter header (fra header template)
wp_head() Henter wordpress head sektion i header filen
get_footer() Henter footer-filen
wp_footer() I footer filen  lige inden </body><html> i filen footer.php Henter WP footer sektion og admin menu-bar
get_stylesheet_uri() henter adressen for stylesheet filen i temamappen Filen hedder som regel
get_theme_file_uri(relativ sti til fil) henter stien til den fil, der skal bruges Bemærk at funktionen med tom parenteser  peger på tema-mappen. og i html skal man “echo” sti til tema + sti i tema til fil
add_theme_support(‘title-tag’) Sørger for at plugins og tema kan styre dokumentets titel tag. Noter, at den skal erklæres i functions.php og skal hookes på after_setup_theme
wp_get_post_parent_id(get_the_ID()) Returnerer side ID for forælder siden,  hvis den eksisterer. (Ellers 0)
get_the_ID() Returnerer sideID for siden
wp_list_pages() Lister alle sider og udskriver dem man bruger det til filtrere  blandt sider
get_pages() returnerer alle sider bruges til at tjekke om en side har børn
language_attributes() Sætter lang attrbuten til det sprog wordpress er installeret i i html tagen
bloginfo skriver oplysninger fx bloginfo(‘charset’) kan skrive UTF-8
get_bloginfo() Returnerer oplysninger
body_class() skriver klasse i body-tag fx hvilken template, om man er logget ind, side id, child eller parent, hvis child, så side nr for parent etc.
paginate_links();
returnerer pagination,  udskriv: echo …, å at man får link til næste/forrige side bruges i index.php lige inden sidste div
the_archive_title() Udskriver titlen indlæg i arkivet, alt efter om det kategory, forfatter eller tid Bruges i archive.php i titel feltet
the_archive_description() skriver ud det man skriver i “beskrivlse feltet” under kategory,  eller forfatter Btuges i archive.php lige under titelfeltet

 

WordPress hooks Hvad den gør Bemærkninger
add_action(‘hvad og hvornår’,’Navn på
funktion’)
hooker funktionen i henhold hvårnor det skal
ske, og type af funktion (fx indlæse fil eller
udføre et script)
Fundamental programmeringsmåde i WordPress
add_action(‘wp_enqueue_
script’, ‘university_files’)
Udførsel af funktionen university_files() i filen functions Tema-mappen indelholder en fil, som hedder functions
wp_enquue_style(name,uri to css file) indlæs fra css fil med den givne uri-værdi Det kan være sti til en fil eller extern resource
w+_enqueue_script(name, uri to script file) indlæs fra script fil med den givne uri-værdi Noter her kun enkel script navn til udførsel,
add_action(‘after_setup_theme’, ‘name of function’) Her beder vi wordpress at udføre funktionen efter at html siden er indlæst

funktions filen udføres inden konstruktion af html siden, der kommer ud, idet html siden skal udføres ved hjælp af de angivne resourcer

More Details