Błąd 404 po zmianie formatu odnośników

Domyślny format linków w WordPressie nie jest przyjazny ani dla użytkowników, ani dla wyszukiwarek – dlatego jedną z pierwszych rzeczy, jakie należy zrobić po utworzeniu nowej strony, jest jego zmiana. Można to zrobić w sekcji Ustawienia → Bezpośrednie odnośniki panelu administracyjnego.

Jednak czasem zdarza się, że po zmianie formatu linków próba otwarcia dowolnej podstrony naszego serwisu kończy się błędem 404 (nie znaleziono strony). Najczęstszą przyczyną takich problemów jest niemożliwość zapisania przez WordPressa zmian w pliku .htaccess. Na szczęście bardzo łatwo to naprawić.

Ten wpis jest częścią cyklu Pierwsze kroki, skierowanego do najbardziej początkujących użytkowników WordPressa i poruszającego podstawowe zagadnienia związane z obsługą tego CMSa.

Zmiana formatu odnośników wiąże się z koniecznością zmodyfikowania przez WordPressa pliku .htaccess naszego serwisu, dzięki któremu linki te będą działały. Przykładowo, jeśli zdecydujemy aby nasze linki zawierały tytuł wpisu lub strony, to link do strony „O nas” będzie wyglądał tak: http://moja-strona.pl/o-mnie/. Domyślnie serwer otrzymując taki adres URL będzie szukał w katalogu głównym naszej domeny folderu o-mnie, którego oczywiście tam nie ma (i być nie powinno). Reguły zawarte w pliku .htaccess mówią serwerowi co ma w takim przypadku zrobić – na przykład przekierować żądanie do pliku index.php WordPressa, w którym znajdują się mechanizmy do obsługi takich adresów.

Modyfikacja .htaccess odbywa się podczas zapisywania zmian ustawień w sekcji Ustawienia → Bezpośrednie odnośniki. Problem w tym, że WordPress ukrywa informację o nieudanej modyfikacji tego pliku. Znajduje się ona na samym dole strony ustawień odnośników, w miejscu, który zwykle nie jest od razu widoczne na monitorze (trzeba przewinąć stronę). Po zapisie pojawia się wprawdzie komunikat Teraz należy zaktualizować plik .htaccess., ale z doświadczenia wiem, że większość osób go po prostu przegapia (nie ma on formy komunikatu o błędzie).

Błąd aktualizacji .htaccess

Problem ten można rozwiązać na dwa sposoby. Najczęściej jest on spowodowany przez nieprawidłowe uprawnienia katalogu, w którym zainstalowaliśmy WordPressa, lub samego pliku .htaccess. Katalog powinien mieć uprawnienia 755, a plik 644. Można to sprawdzić logując się do serwera przez FTP – każdy klient FTP posiada funkcję modyfikacji uprawnień. Gdy już naprawimy uprawnienia, możemy ponownie spróbować zapisać zmiany w ustawieniach odnośników.

Drugim sposobem jest ręczna aktualizacja pliku .htaccess. W tym celu musimy zalogować się do serwera przez FTP, otworzyć plik, podmienić jego zawartość kodem znajdującym się w polu umieszczonym pod komunikatem o błędzie w zapisie, a następnie zapisać zmodyfikowany plik. Operację tę będziemy musieli powtórzyć po każdej zmianie formatu odnośników.

O ile pierwsza metoda może być nieskuteczna w przypadku niektórych serwerów, o tyle druga zadziała w każdym przypadku.

Bezpośredni link

  • Później warto ponownie przywrócić plikowy htaccess uprawnienia 444.

    • Fragli

      ja mam .htaccess w katalogu dla testa nawet go usunąłem i dałem zapisz zmiany w wp i plik został ponownie utworzony i z poprawną (taka jak poprzednio) zawartością. Niestety strony nadal się nie otwierają – błąd 404. Może być jakiś problem np z apache który by nie czytał tego pliku? czy jakieś inne sugestie?

  • A jeżeli komunikat o błędzie nie pojawia się (Format bezpośrednich odnośników został zaktualizowany.) a nie wczytuje stron – błąd 404?

    • Sprawdź czy plik .htaccess został zapisany (czy istnieje w katalogu głównym WordPressa) i co zawiera.

      • Jako „najbardziej początkujący użytkownik WordPressa” :) z pewną nieśmiałością napiszę, że nie widzę u siebie takiego pliku .htaccess. Inna sprawa, że do dnia dzisiejszego nie logowałam się przez FTP. Wszystko robiłam poprzez kokpit :(

        • Jeśli jesteś pewna, że w katalogu głównym WordPressa (tam gdzie jest plik wp-config.php) nie ma pliku .htaccess, to stwórz go sobie (pamiętaj o kropce na początku nazwy) i umieść w nim standardowy kod:

          RewriteEngine On
          RewriteBase /
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule . /index.php [L]

          • Długo by pisać jaką drogę przeszłam, ale dokonałam tego :) Jako klienta FTP użyłam Cyberduck, nie widzę nadal tego pliku, mimo iż w ustawieniach zaznaczyłam ‚pokaż pliki zaczynające się na „.”‚ Może tam jednak był? W każdym razie umieściłam tam, ten stworzony przez siebie, z powyższym kodem i strony się otwierają. OGROMNIE DZIĘKUJĘ!

  • Robert

    A ja po zmianie bezpośrednich odnośników mam zupełnie inny problem.
    Zacznijmy od tego, że była sobie stara strona i chodziła na CMSie autorskim, tzn. napisanym przez informatyka. Nowa wersja strony postawiona jest na WP i wszystkie wpisy ze starej zostały przerzucone do nowej bazy WP. Wszystko śmigało bez problemu, zarówno nowe wpisy dodane już w WP, ale i też stare przerzucone z archiwum sięgające 2006 roku (blisko 14 tys wpisów). Problem zaczął się po zmianie bezpośrednich odnośników (wybrany format „http://ttg.com.pl/przykladowy-wpis/”). Okazało się, że linki do „starych” wpisów nie działają, po kliknięciu przerzuca na stronę główną serwisu. Zerkając do listy wpisów zauważyłem, że te „stare” wpisy nie posiadają uproszczonej nazwy. Kilka wpisów zmodyfikowałem, dodając uproszczoną nazwę i zaczęły one działać jak należy. Tylko, że wpisów do zmiany jest ok. 14 tys i raczej jest to niewykonalne „na piechotę”. Czy istnieje jakiś zautomatyzowany sposób by to pozmieniać?

    • http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs

      Nie zapomnij o zrobieniu kopii przed skorzystaniem z tej wtyczki.

      • Robert

        Dzięki za podrzucenie linka, kopia zrobiona, wtyczka odpalona i działa poprawnie, ale…

        W trakcie pracy wyskakuje info „ABORT: PHP cpu time limit exceeded” i się okazuje, że poprawiło ok 2500 wpisów. Wszystko wisi na home.pl. Napisałem do nich, zobaczymy czy zwiększą limit.

        • Wątpię, że zwiększą. Chyba jedyną metodą będzie pobranie bazy danych, załadowanie jej do bazy lokalnej (na Twoim komputerze), poprawa linków i przeniesienie bazy z powrotem na serwer.

  • Ten wpis dotyczy problemów po zmianie formatu odnośników, a Twój problem wynika ze zmiany domeny – to dwie zupełnie różne rzeczy. Musisz w bazie danych podmienić starą domenę na nową.

    Na pewno pomocny może się okazać ten tekst: https://wpzen.pl/przenoszenie-strony-na-inny-serwer/
    Możesz również skorzystać z tego skryptu: https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

  • cruze_nt

    Witam

    jestem raczkującym użytkownikiem, więc proszę o wyrozumiałość.

    Ćwiczę tworzenie strony opartej na WordPress`ie i napotkałem na mały problem.

    Chciałem ustawić bezpośrednie odnośniki do stron w formie – /%postname%/

    , dokonałem stosownych zmian w menu (Ustawienia bezpośrednich
    odnośników) zaznaczyłem opcję „nazwa wpisu”, lecz po zmianie tej opcji
    przestają działać wszystkie strony (działa tylko „strona główna”).

    Podmieniłem także zawartość pliku .htaccess na:

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /strona/
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /strona/index.php [L]

    # END WordPress

    Jakieś propozycje co zrobić, żeby strona działała prawidłowo?

    Stronę tworzę na serwerze lokalnym (WAMP)

    Z góry dziękuje za pomoc.

    Pozdrawiam

    • Może Twój serwer nie ma zainstalowanego modułu mod_rewrite?

      • cruze_nt

        Wielki dzięki faktycznie miałem to „odhaczone”, pomogło, działa :)
        Pozdrawiam :)

  • wojtaloux

    Mam strone na serwerze widnows przez jakis czas nie moglem sobie poradzic ze zmiana bezposrednich odnosnikow ale udalo sie gdy zmieniłem plik web.config na taki:

    Od tej pory działają pozostałe strony. Wczesniej działała tylko głowna.
    Pozdrawiam.

  • Adam

    Świetna pracy stary! Wielki plus! U mnie trzeba było zmienić uprawienia pliku, aby zadziałało (miałem 444, a nie 644)! Gdyby nie Ty nigdy bym na to nie wpadł!:)

  • Adam

    Mam problem z htaccessem i jednocześnie z przyjaznymi linkami. Wprowadzam skrypt do przyjaznych i po odświeżeniu strony generujemy i samodzielnie stary skrypt (tym samym wywala mi linki). Próbowałem już ze zmianami atrybutów na 444, 644,666, 660 nic nie działa! Macie pomysł jak to naprawić? Mój htaccess wygląda tak:

    RewriteEngine On
    RewriteBase /galeria/
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /galeria/index.php [L]

    Po odświeżeniu znikają linijki RewriteBase /galeria/ i RewriteRule . /galeria/index.php [L] – to znaczy brak słów galeria.

    Co robić?

    • A w ustawieniach WordPressa masz ustawiony URL strony na „http://twoja-domena.pl/galeria/” ? Jeśli nie, to znasz już przyczynę.

      • Adam

        Oczywiście;] Bez tego w ogóle bym nie pisał :P

  • Portal ZaraszowPl

    Mój WP nie wyświetla komunikatu (komunikat Teraz należy… ), więc nie mogę skopiować przekierowań. Do pliku nie zapisuję nawet po ust. upr. na 777. Zmieniałem na czysty z domyślnym kodem. Czy powodem może być, że jest to podstrona? http://portal.zaraszow.pl
    P. S. to samo mam z inną postroną.

    • Jesteś pewien, że sprawdzasz odpowiedni plik .htaccess?

      • Portal ZaraszowPl

        tak
        …# wordpess
        edit: też dodawałem folderpodfolder to zn 1 RewriteBase /nazwa-folderu/

  • Marcin Bałazy

    U mnie po zmianie permalinków podstrony też nie działają.
    Sprawdziłem uprawnienia – jest tak jak napisane powyżej, kod w .htaccess też jest odpowiedni tzn.

    # BEGIN WordPress

    RewriteEngine On

    RewriteBase /blog/

    RewriteRule ^index.php$ – [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /blog/index.php [L]

    # END

  • Agneszka Mirczuk

    Prosty sposób na permalinki w Wordpress można samodzielnie ogarnąć download.net.pl/jak-zmieniac-permalinki-na-stronie-wordpress/n/9274/. Wystarczy skorzystać z odpowiedniego poradnika. polecam bo warto.

  • Mario

    Witam. Mam bardzo ważne pytanie. Prowadzę stronę od dłuższego czasu i 
    fajnie się pozycjonuje. Niestety poniosło mnie trochę z niewiedzy i 
    stworzyłem za dużo kategorii wpisów i tagów. Chciałbym to zmienić. Wiem
    że można to zrobić łatwo dokonując zmiany jak napisałeś ale nie wiem czy
    będzie to miało znaczenie dla pozycjonowania. Czy masowa zmiana url
    wpisów w przedstawiony przez ciebie sposób nie spowoduje zamieszania w 
    indeksowaniu. Zależy mi na przeniesieniu wszystkich wpisów do 5 nowych
    kategorii i skróceniu adresów. Byłbym wdzięczny za info. Pozdrawiam.

    • Oczywiście, że taka zmiana będzie miała wpływ na to, jak strona jest widoczna w Google. Przez pewien czas w Google wciąż będą widoczne „stare” (czyli już nieistniejące) adresy. Twoja w tym głowa, aby przygotować odpowiednie przekierowania z kodem 301 – dzięki temu Google szybciej zaktualizuje sobie strukturę treści na Twojej stronie, a użytkownicy nie będą trafiali na stronę 404.