Błąd 404 na podstronach WordPressa?

Może się zdarzyć, że instalacja WP przebiegnie pomyślnie, w zapleczu administratora dodacie sobie wpis lub stronę i przy kliknięciu Podejrzyj wszystko będzie w porządku. Po pomyślnym zapisaniu chcecie zobaczyć jak nowy materiał prezentuje się na stronie, a tu… Not found – 404.

W tym wpisie opiszę możliwe przyczyny takiej sytuacji, ale dotyczy to wyłącznie przypadków, w których nie działają tylko tzw. proste adresy. Czyli http://domena.xyz/folder/kategoria/nazwa-wpisu/ nie chce działać, z kolei http://domena.xyz/folder/?p=457 nie sprawia takich problemów.

Zauważyliście, że podane powyżej przykładowe adresy odnoszą się do instalacji WP umieszczonej w podfolderze? A więc nasze przyjazne linki muszą odnosić się do konkretnego folderu, a nie samej domeny.

Brak pliku .htaccess

Może się zdarzyć, że przy przesyłaniu plików przez klienta FTP sam .htaccess nie zostanie wgrany na serwer. Trzeba sprawdzić, czy .htaccess na pewno wyświetla się w katalogu WP, a w razie potrzeby dograć go lub utworzyć ręcznie (zobacz: http://codex.wordpress.org/htaccess). Należy pamiętać, iż sam plik powinien mieć odpowiednie prawa dostępu – 644.

Po pomyślnym utworzeniu .htaccess warto zalogować się do swojego zaplecza i wybrać Ustawienia » Bezpośrednie odnośniki, a następnie zapisać nowe ustawienia według własnego uznania.

Jeżeli jednak rzeczywiście na dysku nie było pliku .htaccess, to proste adresy nie będą działały niezależnie od tego, czy swojego WordPressa zainstalowaliśmy bezpośrednio w naszej domenie czy podkatalogu. Przechodzimy więc do następnej możliwej przyczyny.

Zły RewriteBase

Tu dochodzimy do sedna sprawy – dlaczego właśnie nice urls nie chcą chodzić tylko w podfolderze. Domyślnie w większości plików .htaccess mamy linijkę:

1
RewriteBase /

Sprawia ona, że oprogramowanie serwera traktuje jako ciąg do zastąpienia wszystko to, co występuje po pierwszym slashu mieszczącym się zaraz pod nazwie domeny. Aby zostawić w spokoju cały domyślny adres strony, zamieniamy powyższą linię kodu na:

1
RewriteBase /nazwa-folderu/

I analogicznie, jeśli mamy bardzo dużo stron internetowych w ramach jednej domeny, a kłopotliwa kopia WP jest bardzo zagnieżdżona stosujemy coś w stylu:

1
RewriteBase /folder/podfolder/podfolder-2/

Wtedy bez problemu dla http://domena.xyz/folder/podfolder/podfolder-2/?p=1234 będzie można używać linku http://domena.xyz/folder/podfolder/podfolder-2/kategoria/nazwa-wpisu/ czyhttp://domena.xyz/folder/podfolder/podfolder-2/2014/08/nazwa-wpisu/ albo dowolnie sformatowanego samodzielnie.