Dlaczego nie działają mi bezpośrednie odnośniki w WordPressie?

  • Poziom trudności:

Pomogłem rozwiązać Twój problem? Wspieraj moje działania bym pisał więcej:

Ostatnio zostałem poproszony o poprawienie kilku drobiazgów na stronie pewnej firmy budowlanej. Pierwsza rzecz jaka rzuciła mi się w oczy to problem z ładnymi linkami (pretty links). Zamiast ładnych i użytecznych nazw podstron np. /ocieplanie-budynkow/ przywitały mnie szorstkie adresy zakończone ?page_id=15. Postanowiłem problem wziąć na tapetę i już wiem czemu twórca tej strony nie poradził sobie z ustawieniem bezpośrednich odnośników w ładniejszej formie.

Jeśli już popracowałeś trochę na WordPressie i przejrzałeś wszystkie możliwe opcje – z pewnością wiesz, że pod sekcją Ustawienia -> Bezpośrednie odnośniki znajdziesz opcje ustawienia ładnych linków. Zmiana jest banalnie prosta. Wystarczy wybrać zamiast ustawień domyślnych np. nazwę wpisu i całość zapisać. To wystarczy aby uzyskać ładne i proste do zapamiętania linki.

zmiana-w-bezposrednich-odnosnikach

W tym przypadku ta opcja niestety nie zadziałała.

Okazało się, że WordPress instalowany na Home.pl przy pomocy autoinstalatora (proszę Was, nigdy nie róbcie tego, bo potem możecie mieć ze stroną więcej kłopotów) nie wgrał pliku .htaccess.

Czym jest .htaccess?

Ten plik pozwala na konfigurację wielu parametrów serwera, na którym znajduje się strona. Najczęściej używanymi funkcjonalnościami jest przekierowanie 301 oraz właśnie ładne linki. Jeśli odnośniki do Twojej strony nie działają – najprawdopodobniej winny jest .htaccess i jego błędna konfiguracja (lub brak tego pliku).

Jak wygląda .htaccess po instalacji WordPressa?

Standardowy plik .htaccess wygląda w następujący sposób:

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

Gdyby się okazało że nie masz pliku w instalacji WordPressa w głównym katalogu – konieczne jest abyś go wgrał. Możesz pobrać taki standardowy plik tutaj. Żeby sprawdzić czy w Twojej instalacji WordPressa znajduje się taki plik musisz połączyć się z serwerem przy pomocy klienta FTP. Następnie po połączeniu po jednej stronie otwórz swój dysk gdzie znajduje się gotowy plik .htaccess, a po drugiej otwórz główny katalog Twojej strony (główny katalog poznasz po znajdujących się tam katalogach: wp-admin, wp-content, wp-includes i kilkunastu plikach umieszczonych luzem). Teraz wystarczy, że przeciągniesz plik z dysku luzem do katalogu głównego.

Taka operacja spowoduje, że WordPress zacznie interpretować poprawnie bezpośrednie odnośniki. Przejdź jeszcze raz do sekcji Ustawienia -> Bezpośrednie odnośniki i wybierz np. nazwę wpisu. Całość zapisz i przejdź do strony. Dla pewności ją odśwież przy pomocy Ctrl + F5. Teraz zacznij przechodzić przy pomocy nawigacji pomiędzy witrynami. Jeśli linki zmieniły się z ?page_id= na ładne adresy – znaczy się cała operacja się udała. Gratulacje!

Co jeśli moja strona jest w katalogu?

Może się okazać, że mimo dodania pliku .htaccess linki nie działają w dalszym ciągu poprawnie. Może przy próbie przejścia na podstronę pojawić się błąd 404. Jeśli Twoja strona jest w katalogu, wtedy sprawa jest banalnie prosta. Załóżmy że adres Twojej strony jest taki jak adres testowego WordPressa na którym prezentuję Ci różne funkcjonalności czyli:

https://500sekund.pl/500/

Po czym poznaję, że strona jest w katalogu? Przede wszystkim po tym, że po otwarciu powyższej strony otwiera się strona główna, a adres zawiera po końcówce domeny .pl dodatkową ścieżkę /500/. Czyli to /500 to nazwa katalogu, w którym znajduje się strona.

Spójrzmy teraz na plik .htaccess który załóżmy że znajduje się w tym katalogu:


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

Zwróć uwagę na linię 4 i 8. Zauważyłeś różnicę w porównaniu ze standardowym plikiem .htaccess? W tych dwóch liniach zapisywana jest bezpośrednia ścieżka dostępu do strony. Jeśli ta będzie błędnie wskazana – linki prowadzące do podstron nie będą w stanie wskazać podstron i będzie się pojawiał błąd „strona nie została znaleziona”.

Wystarczy więc w linii 4 i 8 wprowadzić:

RewriteBase /nazwakataloguwktorymjesttwojastrona/

i

RewriteRule . /nazwakataloguwktorymjesttwojastrona/index.php [L]

Powinno pomóc. Mam nadzieję, że udało się rozwiązać Twój problem.

UDOSTĘPNIJ

Pomogłem rozwiązać Twój problem? Wspieraj moje działania bym pisał więcej: