CO należy zrobić, by zamiast rozszerzenia .html lub .php:
kosmonauta80.pl/kontakt.html
Wystarczyło wpisać do przeglądarki:
kosmonauta80.pl/kontakt
Konfiguracja serwera HTTP, zależy z jakiego korzystasz.
Opcja 1:
Najprościej jeśli tego typu linków nie masz dużo i są one z góry znane to faktycznie można skorzystać z modułu mod_rewrite i pliku .htaccess zgodnie z tym co napisał @cerrato
Moduł mod-rewrite z obsługą plików .htaccess jest domyślnie instalowany na większości serwerów z serwerem Apache więc nie powinno być problemu z uruchomieniem.
Wówczas zawartość takiego pliku mogłaby wyglądać następująco:
Zawartość pliku .htaccess
RewriteEngine On
#przekierowanie na plik kontakt.php
RewriteRule ^kontakt$ kontakt.php
#przekierowanie na plik index.php obsługujący moduły (w jakiś sposób)
RewriteRule ^kontakt$ index.php&module=kontakt
Ma to jednak pewne ograniczenia jeśli lista adresów jest w jakiś sposób dynamiczna lub zapisana w bazie danych.
Opcja 2:
Jeśli natomiast adresy podstron są dynamiczne lub pochodzą z bazy danych wówczas lepiej napisać swój własny prosty "router", który jest parą dwóch plików:
Zawartość pliku .htaccess:
RewriteEngine On
#jeśli plik nie istnieje fizycznie to wszystko kieruj do pliku index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L]
Zawartość pliku index.php
<?php
$urlContent [ 'kontakt' ] = "<div>To jest strona kontakt :-)</div>" ;
$urlContent [ 'o-mnie' ] = "<div>To jest strona o mnie czyli o nikim ciekawym...</div>" ;
$urlContent [ 'ciekawe/linki' ] = "<div>A tu mamy ciekawe linki <a href='https://4programmers.net/'>Smieszne rzeczy</a></div>" ;
$pagePath = '/jesli-jest-podkatalog/' ; // <- ścieżka względna na serwerze do strony
// gdy strona w głównym katalogu domeny to zostaje puste.
$myUrl = str_replace ( $pagePath , '', parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH ) );
if ( isset ( $urlContent [ $myUrl ] ) ){
$content = $urlContent [ $myUrl ];
} else {
$content = "Nie znaleziono strony / adresu !!!";
}
echo "
Twoj przyjazny lionk to: [{$myUrl}]
<hr>
<div style='color:red;font-size:18px;'>{$content}</div>
";
Większość serwerów domyślnie zwraca plik index.html
lub index.php
gdy podasz tylko nazwę katalogu, albo nic nie podasz (samę domenę), jeśli plik o takiej nazwie wrzucisz do katalogu głównego. Jeśli domyślnie nie zadziała, wprowadź następujący wpis do konfiguracji Apache (nie trzeba żadnych modułów):
DirectoryIndex index.html
DirectoryIndex index.htm
DirectoryIndex index.php
Wtedy serwer najpierw sprawdzi istnienie plików index.html
lub index.htm
, potem index.php
, a dopiero potem wyświetli indeks katalogu lub błąd.
Ja mam cały ruch który, nie jest plikiem fizycznym, przekierowany na index.php a tam zrobiony swój własny router który rozpoznaje ścieżki.
Konfiguracja w nginx:
location / {
try_files $uri $uri/ /index.php?&$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi.conf;
}
Następnie w index.php rozpoznaje ścieżkę np. wg $_SERVER['REQUEST_URI'] i kieruję do odpowiedniego kontrolera który wyświetla stronę.