WordPress: Odnośniki bezpośrednie (permalinks)

Spis treści

Permalinks, czyli odnośniki bezpośrednie, stosowane są głównie w celach estetycznych oraz by poprawić nieco SEO danego artykułu czy postu. Jeśli chodzi o efekty wizualne, to raczej wszyscy się zgodzimy, że link w postaci morfitronik.pl/wordpress-administrator-bloga/ jest o wiele prostszy do odszyfrowania dla człowieka niż link typu morfitronik.pl/?p=1 . Natomiast w przypadku SEO mamy kluczowe słowa czy fazy bezpośrednio w linku, który jest indeksowany i wyświetlany przez wyszukiwarki, np. google. W tym wpisie postaramy skonfigurować sobie właśnie te odnośniki.

Przede wszystkim, odnośniki bezpośrednie możemy ustawić z poziomu panelu administracyjnego (Settings => Permalinks):

wordpress-permalinks

I jak widzimy wyżej, mamy do dyspozycji kilka opcji ale nie wszystkie są dobrym rozwiązaniem. Generalnie, z punktu widzenia SEO, powinniśmy uwzględnić w linku jedynie nazwę postu, pomijając przy tym zupełnie kategorie czy daty (choć moim zdaniem daty są jak najbardziej racjonalne, przynajmniej sam rok), a już na pewno nie powinniśmy używać ?p=1 .

Jeśli przyjrzymy się uważniej, dostrzeżemy, że w proponowanych linkach mamy pozycję odnoszącą się do skryptu WordPress'a: /index.php/ . Przydałoby się obciąć ten kawałek i już nie tylko ze względu estetyki czy SEO ale również z powodu bezpieczeństwa, bo niekoniecznie musimy się wszystkim chwalić, który skrypt został wywołany. Choć w sumie, czy to ma znaczenie w WordPress'ie?

Tak czy inaczej, przy próbie wycięcia /index.php/ z permalinków, nasze posty zwyczajnie się nie będą chciały załadować. Teoretycznie adres jest poprawny ale po przejściu do niego jest zwracany komunikat: "Not Found The requested URL /blog/hello-world/ was not found on this server.", a to z kilku powodów.

Prawa dostępu do pliku .htaccess

W zależności od typu instalacji WordPress'a, dostęp do pewnych plików może być utrudniony i pewnych przypadkach WordPress nie będzie w stanie stworzyć sobie pliku .htaccess , o czym nas powinien poinformować poniższym komunikatem:

wordpress-info-o-potrzebie-aktualizacji-htaccess

Niżej tam na stronie po aktualizacji permalinków mamy instrukcję co dokładnie musimy zrobić aby nowe adresy zaczęły obowiązywać. Konkretnie chodzi o dodanie poniższego bloku kodu do pliku .htaccess , który powinien być zlokalizowany w głównym katalogu WordPress'a:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
<IfModule>

Powyższy kod nie jest uniwersalny i trzeba go nieco przerobić -- w miejscach gdzie jest blog wystarczy wstawić nazwę katalogu WordPress'a.

Oczywiście, ta powyższa zwrotka nie zadziała pod kątem wszystkich serwerów www i jest ona przeznaczona raczej tylko dla Apache i to tylko tych z włączonym modułem mod_rewrite .

Konfiguracja katalogu WordPress'a na serwerze

Jeśli stawiamy WordPress'a na swoim własnym serwerze www, to raczej natkniemy się na taki problem, że ten powyższy kod zwyczajnie nie zadziała i nie będzie miało to znaczenia czy WordPress sam ten kod sobie dopisze, czy też my zrobimy to za niego ręcznie. Jak można przeczytać tutaj, potrzebny jest dodatkowy zabieg, który umożliwi zaaplikowanie reguł użytkownika, czyli tych wpisanych do pliku .htaccess . Domyślnie, ze względów bezpieczeństwa, serwer Apache nie zezwala na tego typu operacje i trzeba ręcznie wskazać katalogi, w których można stosować ten plik.

Edytujemy zatem plik konfiguracyjny Apache, na debianie jest to /etc/apache2/apache2.conf i wrzucamy do niego poniższy kod:

<Directory /apache/blog>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Chodzi generalnie o dodanie dyrektywy AllowOverride , która to mając wartość All umożliwi nadpisywanie wszystkich opcji w tym konkretnym katalogu za pośrednictwem pliku .htaccess .

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.