Przenoszenie plików WordPressa do podkatalogu

WordPress oferuje możliwość przeniesienia wszystkich swoich plików do podkatalogu katalogu głównego domeny. W praktyce oznacza to, że jeśli nasza strona znajduje się pod adresem nasza-strona.pl, to wszystkie pliki i katalogi WordPressa znajdą się na przykład pod adresem nasza-strona.pl/wordpress. Zobaczmy w jaki sposób można wykonać taką operację i po co w ogóle moglibyśmy chcieć coś takiego zrobić.

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.

Zacznijmy od tego, że przeniesienie plików WordPressa z katalogu głównego do podkatalogu nie ma praktycznie żadnego wpływu na bezpieczeństwo. Jednym sensownym powodem, dla którego moglibyśmy chcieć przenieść pliki gdzie indziej, jest zachowanie porządku w katalogu głównym naszego serwera, szczególnie w przypadku, gdy mamy tam większą ilość jakichś własnych katalogów.

WordPress - pliki

Zwykle katalog główny domeny, w którym zainstalowany jest WordPress, wygląda tak jak pokazano na obrazku obok – trzy katalogi i kilkanaście plików. Niby nie jest tego dużo, ale gdy dodamy na przykład pliki weryfikujące własność domeny dla usług typu Google Webmasters, nasze własne katalogi czy różne inne dodatkowe rzeczy, to co bardziej pedantycznym osobom może się to po prostu nie podobać. Spróbujmy więc przenieść wszystkie (no, prawie wszystkie) te pliki i katalogi do podkatalogu wordpress, który utworzymy w katalogu głównym naszej domeny (czyli najczęściej w katalogu, który widać na załączonym obrazku).

Po stworzeniu nowego katalogu przenosimy do niego wszystkie pliki WordPressa. Jeśli przeprowadzamy tę operację na istniejącym już serwisie, to musimy pamiętać o dwóch rzeczach.

Po pierwsze, zaraz po przeniesieniu plików nasza strona przestanie być dostępna – warto więc najpierw skopiować pliki, a dopiero później usunąć je z katalogu głównego.

Po drugie, katalog wp-content zawiera wszystkie zainstalowane wtyczki i szablony oraz (co istotniejsze) wszystkie znajdujące się w bibliotece mediów pliki wraz z wygenerowanymi miniaturami. Oznacza to, że katalog ten może być dość duży i jego kopiowanie może zająć trochę czasu. W takim przypadku polecam przenieść go do podkatalogu korzystając z jakiegoś menedżera plików działającego po stronie serwera (większość firm hostingowych udostępnia coś takiego w panelu administracyjnym).

WordPress - plikiJeśli przenieśliśmy już wszystkie pliki do utworzonego wcześniej katalogu wordpress, to teraz musimy skopiować z tego katalogu pliki .htaccessindex.php z powrotem do katalogu głównego domeny. Po zakończeniu tych czynności katalog główny naszej domeny powinien wyglądać mniej więcej tak jak na załączonym obok obrazku.

Następnie musimy dokonać jednej drobnej zmiany w pliku index.php. Należy znaleźć w nim tę linię:

i zamienić ją na:

Nie ma obaw – plik ten nie zostanie nadpisany przy aktualizacji WordPressa, ponieważ wszystkie aktualizowane pliki znajdują się teraz w katalogu wordpress.

Ostatnią czynnością, jaką musimy wykonać, jest zmiana konfiguracji WordPressa. W panelu administracyjnym (który znajduje się teraz pod adresem nasza-strona.pl/wordpress/wp-admin/ trzeba przejść do sekcji Ustawienia → Ogólne i zmienić wartość opcji Adres URL WordPressa na http://nasza-strona.pl/wordpress. Może również zajść konieczność uaktualnienia ustawień linków – aby to zrobić należy przejść do sekcji Ustawienia → Bezpośrednie odnośniki i po prostu kliknąć przycisk Zapisz zmiany (co spowoduje odświeżenie pliki .htaccess).

I to właściwie tyle. Oczywiście adres naszej strony pozostaje bez zmian, podobnie jak adresy wszystkich jej podstron.

Bezpośredni link

  • Łukasz

    dzieki za wpis i instrukcje dla „zielonych”, napewno skorzystam ;)

  • Mam banalne pytanie, bo przy moich przenosinach jakoś sobie nie poradziłem…
    W wpisach mam linki do innych wpisów… (wordpres wstawia pełne adresy)…. po zmianie lokalizacji wordpressa z /wp/ do głównego katalogu / musiałem ręcznie updatować wpisy, aby linki były poprawne…
    na pewno jest jakaś metoda na to, aby tego nie rozbić w taki sposób?

  • A pytanko takie mam.

    Mam na jednym serwerze 3 strony wordpressowe. Każda z nich jest osobną instalacją w osobnych katalogach. Może nie koniecznie dotyczy to przenoszenia do podkatalogu wiec przepraszam najmocniej za off topic. Czy lepiej jest w tym wypadku trzymać wszystko w osobnych katalogach czy pobawić się w jakiś Multisite proszę Pana?

    • Na Twoje pytanie nie ma niestety jednoznacznej odpowiedzi. Z instalacjami sieciowymi (multisite) jest trochę problemów i nie w każdym przypadku się one sprawdzą. Nie wszystkie wtyczki działają poprawnie z multisite, tak więc zacznij od upewnienia się, że te, których używasz, nie mają takich problemów. Taka instalacja ma sens np. w przypadku, gdy kilka stron korzysta z tego samego motywu lub tego samego zestawu wtyczek – jeśli te strony są kompletnie różne, a na dodatek skomplikowane (korzystają z dużej ilości różnych dodatków), to lepiej zostać przy osobnych instalacjach.

      Jeśli chcesz sobie ułatwić zarządzanie tymi trzema WordPressami, to możesz skorzystać z narzędzi typu InfiniteWP czy ManageWP.

      Osobiście nie jestem fanem multisite – uważam, że korzyści, jakie daje taka instalacja, są zbyt małe w stosunku do problemów, jakie może sprawiać.

      • O narzędziach które przywołujesz pojęcia nie mam ale sprawdzę je bankowo. Stronki te kompletnie nie są skomplikowane i nie wiem czy którakolwiek z nich korzysta z większej ilości wtyczek niż 3 :)

        Serdecznie dziękuję za odpowiedź kolego. Naprawdę rewelacyjny blog a pasją do WordPress’a aż zarażasz Bartoszu!

        Pozdrawiam

  • A tak na marginesie…

    Trafiłem na tego bloga kilka tygodni temu i przejrzałem go od deski do deski. Wszystkie artykuły których treścią byłem zainteresowany dodałem sobie do czytnika Kindle. Wszystko przeczytałem i jestem bardzo mile zaskoczony. To pierwszy blog o tematyce wp który niesie tak wartościowy kontent!

    Trzymam kciuki i blog oczywiście do RSS dodany!

  • Darek

    Ciekawe artykuły na blogu :)
    Odnośnie poruszonej kwestii bezpieczeństwa w tym poście, kiedyś czytałem, że taka instalacja pomaga m. in. na boty, które nam się logują do panelu. No i jakiś rok temu na moją stronę w ciągu niecałej godziny miałem niecałe sto prób logowania. Po wykonaniu tego o czym artykuł, od roku mam spokój. :)

  • shumy_pl

    Witam serdecznie,
    Nawiązując do tego artykułu mam do Pana pytanie.
    Jestem początkującym użytkownikiem WordPress.
    Dokonałem instalacji WP w katalogu wp.
    Witryna wyświetla się pod adresem http://www.domena.pl/wp co było dla mnie wygodne w momencie tworzenia strony gdyż była ona widoczna wyłącznie dla mnie po dopisaniu do adresu /wp
    Problem pojawił się gdy postanowiłem ją opublikować szerszemu gronu.
    Postanowiłem przekierować domenę na katalog wp w którym znajduje się strona za pomocą .htaccess nie wiem jednak czy to dobre rozwiązanie.
    Zależy mi by wpisując adres http://www.domena.pl domena przekierowywała na katalog wp.
    Czy mogę liczyć na wskazówki lub ewentualna podpowiedź jak mógł bym rozwiązać problem?

    • Ten tekst opisuje dokładnie taką sytuację – strona ma być widoczna pod adresem ‚domena.pl’, ale WordPress jest zainstalowany w katalogu ‚domena.pl/wp’. Postępuj zgodnie z opisem, a wszystko powinno działać.

      • shumy_pl

        Analogicznie skopiowałć .htaccess i index.php z powrotem do katalogu głównego domeny. Dokonałem zmiany w pliku index.php według instrukcji. Niestety wchodząc na http://www.domena.pl wystąpił komunikat Kod błędu: ERR_TOO_MANY_REDIRECTS pętla zbyt wielu przekierować:(

        • Nie modyfikowałeś przypadkiem pliku .htaccess?

          • shumy_pl

            Skopiowałem go z katalogu wp do katalogu głównego i nic przy nim nie grzebałem. http://www.domena.pl/wp wyświetla się normalnie. http://www.domena.pl wyskakuje ten błąd.
            Wcześniej do katalogu katalogu głównym utworzyłem .htaccess i szukałem w internecie formuł przekierowania po czum wywaliłem .htaccess z katalogu głównego i natknąłem się na Pański artykuł i zacząłem wszystko od nowa według Pańskich wskazówek.

          • Pętla przekierowań z dużym prawdopodobieństwem wskazuje na problem z plikiem .htaccess. Zobacz czy w tym znajdującym się w katalogu ‚wp’ nie masz ustawionego przekierowania na katalog główny.

          • shumy_pl

            <?php

            /**

            * Front to the WordPress application. This file doesn't do anything, but loads

            * wp-blog-header.php which does and tells WordPress to load the theme.

            *

            * @package WordPress

            */

            /**

            * Tells WordPress to load the WordPress theme and output it.

            *

            * @var bool

            */

            define('WP_USE_THEMES', true);

            /** Loads the WordPress Environment and Template */

            require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );

            To cała zawartość index.php

          • Ja nie pisałem o pliku ‚index.php’, tylko o pliku .htaccess.

          • shumy_pl

            # BEGIN WordPress

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

            # END WordPress

          • Nie mam pojęcia skąd wziąłeś ten plik, ale nie jest poprawny. Spróbuj z czymś takim:

            # BEGIN WordPress

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

            # END WordPress

          • shumy_pl

            Niestety bez skutku. Ale mam pytanie. Bo dostrzegłem pewne różnice w index.php

            require(‚./wp/wp-blog-header.php’); powinno być według instrukcji.

            natomiast u mnie jest

            require( dirname( __FILE__ ) . ‚/wp/wp-blog-header.php’ );

          • Ta linia zmieniła się w ostatniej wersji WordPressa. Uaktualniłem instrukcję.

          • shumy_pl

            Rozumiem. Sprawdzę jeszcze wtyczki może jedna z nich robi lisią robotę.
            To możliwe?

          • Wątpię, ale nie zaszkodzi sprawdzić.

          • shumy_pl

            Nie przyniosło to skutków niestety. Mam hosting w 1i1 może oni coś zaradzą.
            Co ciekawe mam środowisko testowe na cba i bez problemów Pana metoda zadziałała.
            Może przekierowanie domeny na katalog za pośrednictwem panelu klienta 1i1 coś da.

          • shumy_pl

            <?php

            /**

            * Front to the WordPress application. This file doesn't do anything, but loads

            * wp-blog-header.php which does and tells WordPress to load the theme.

            *

            * @package WordPress

            */

            /**

            * Tells WordPress to load the WordPress theme and output it.

            *

            * @var bool

            */

            define('WP_USE_THEMES', true);

            /** Loads the WordPress Environment and Template */

            require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );

          • shumy_pl

            Przepraszam. Chciałem wkleić zawartość index.php i chyba nie wyszło.

      • Radek

        mam podobny problem chcę przenieść wordpressa z katalogu wp do katalogu głównwego ale nie mogę znaleźć .htaccess sprawdzałem pliki ukryte i nic w katalogu głównym znajduje się .htaccess ale starej strony co robić.

  • Dzięki za artykuł. Szykuję się do wywalenia htmlowej strony głównej z linkowaniem do wordpressa, na wordpressa zgłaszającego się od razu na stronie głównej i zastanawiałam się jak to zrobić i czy muszę wszystko kopiować i licho wie co mi się spsuje. W najbliższy czwartek okaże się czy jestem dość pojętna, aby wykorzystać częściowo instrukcję stąd :D

  • Millo

    Wszytko pięknie ładnie ale nie wszystko działa tak jak powinno, niestety wtyczka NextGEN Gallery się wysypała i nie ma galerii zdjęć ani albumów…

    • NextGen Gallery to dość specyficzna wtyczka. Nie ma w ogóle galerii zdjęć czy zawierają one zdjęcia, które nie istnieją (obrazki mają nieprawidłowe adresy URL)?

  • Niby wszystko ładnie i poszło z górki. Łopatologiczna instrukcja zdała u mnie egzamin, tylko jedna rzecz coś działać nie chce. Krótki link generowany przez WP cały czas próbuje prowadzić do „domena.aa.pl/wordpres/?p=numer” zamiast „domena.aa.pl/?p=numer” i zgłasza mi się błąd, że strony nie znaleziono. W zasadzie miałam nieco inną sytuację niż opisana tutaj, bo wordpress zawsze był w osobnym katalogu, bo kiedyś jako główna zgłaszała się prosta strona w HTMLu. Teraz chciałam, aby startowało po prostu z WP i tyle. :/ Ma ktos może jakiś pomysł, co z tym fantem zrobić, bo o ile Google+ i FB jakoś sobie z linkowaniem via Publicize radzą mimo tego, to Twitter wymięka, a jestem Twitterowym stworzeniem?

    • O ile się orientuję, to jest problem z Jetpackiem, a nie z samym WordPressem. Funkcja Publicize trzyma gdzieś stary adres strony i używa go mimo że ten się zmienił. Niestety, uniwersalnego rozwiązania chyba nie ma, bo (z tego, co zauważyłem) zawsze konieczna jest interwencja kogoś z Automattic. Tu masz przykład wątku, w którym omawiany jest podobny problem: http://wordpress.org/support/topic/jetpack-publicize-uses-wrong-url-for-twitter

      • Dzięki za linka! :) Sugerowane tam rozwiązanie: odłacz i połącz ponownie JestPacka z wordpress.com wydaje się działać jak należy.

  • Eryk

    Podłączę się pod dyskusję:
    1. Co jeśli po instalacji wordpressa nie mam pliku htaccess?
    2. Czy tego typu przekierowanie na podkatalog „wordpress” nie spowoduje, że w pasku wyszukiwania będzie widoczne domena.pl/wordpress? Wolałbym by było widoczne samo domena.pl

    Proszę o poradę bo właśnie planuję konfigurowanie wordpressa, który ma zastąpić obecną stronę, a nie chcę oczywiście jej wyłączać na czas pracy nad wordpressem.

    • 1. .htaccess utworzy się po zapisaniu formatu bezpośrednich odnośników (Ustawienia -> Bezpośrednie odnośniki).

      2. Nie, przeniesienie plików WordPressa do katalogu nie spowoduje, że w adresie będzie zawarty ten katalog. Na tym właśnie polega cały trick – adres strony pozostaje bez zmian, mimo że WordPress ląduje w osobnym katalogu. ;)

  • Mariusz

    dzięki. Wciąż aktualne ;)

  • zima

    dzięki!

  • Yohi

    Aktualizacja po przenosinach…

    Witam serdecznie

    Przeniosłem pliki WordPressa do innego katalogu i strona działa prawidłowo, jednak podczas aktualizacji nadpisywany jest plik index.php oraz cała zawartość nowego WordPressa ląduje w katalogu głównym domeny, nie aktualizując danych w katalogu.

    W panelu administracyjnym:

    Adres WordPressa (URL) jest ustawiony na http://domena/katalog
    Adres witryny (URL) na http://domena

    Z góry dziękuję za pomoc…

  • Łukasz Pabiańczyk

    Witam ja mam problem z odwrotną czynnością, zainstalowałem na domenie wp do foldera wordpress i teraz aby się adres wygląda http://www.domena/wordpress, analogicznie próbowałem postąpić odwrotnie czyli zmieniłem w ustawieniach adres na http://www.domena.pl i poprawiłem permy oraz skopiowałem przez klienta ftp piliki .htacces i index.php do katalogu root mojej domeny oraz wyedytowałem index dodając nazwę katalogu do odwołania, po wpisaniu nowego adresu w przegladarkę strona nie otwiera się w ogóle….

    Dodam że strona jest na razie w fazie testów i adres nie jest ostateczny ale muszę sięnauczyć jak to poprawnie wykonać. Z góry dzięki za pomoc…

  • Tygrysex

    Witam! Co zrobić jeśli po zabiegu nie mogę się zalogować do bloga ponieważ firefox po kliknięciu zaloguj wykrywa nieprawidłowe przekierowanie?

    • Upewnij się, że wykonałeś prawidłowo wszystkie operacje. Jeśli nie jesteś pewien, że wszystko zrobiłeś poprawnie, wycofaj wprowadzone zmiany i zacznij od nowa. Nie zapomnij o usunięciu pliku .htaccess i ponownym jego wygenerowaniu (wejdż w panelu do sekcji Ustawienia -> Bezpośrednie odnośniki i kliknij przycisk ‚Zapisz’).

  • Krzysztof

    Podzielę się swoim problemem, którego nie mogę rozwiązać może tu znajdę
    jakąś radę .Mam dwie oddzielne instalacje WP na osobnych bazach, każda w
    swoim oddzielnym katalogu.Jedna pod domeną główną i druga w subdomenie głównej
    domeny, w cpanelu kierowana na odpowiedni katalog.
    W ustawieniach kokpitu mam ustawione dla głównej strony

    Adres
    WordPressa (URL) http://strona.pl/folder1
    Adres witryny (URL) http:/strona.pl

    I dla z sudomeną

    Adres
    WordPressa (URL) http://strona.pl/folder2
    Adres witryny (URL) http://subdomena.strona.pl

    Obie działają tyle że z tą w subdomenie nie mogę ustawić
    przyjaznych linków. Gdy ustawie Bezpośrednie
    odnośniki > Nazwa wpisu to wywala błąd i podstron nie ma. Mam pytanie jak
    ustawić poprawnie plik htaccess dla dwóch instalacji w osobnych folderach, tak
    aby działały dla obu bezpośrednie odnośniki dwóch plików htaccess w głównym
    katalogu public_html przecież się nie da.

  • lunacy

    Również próbowałem opisanych tutaj sposobów na przekierowanie katalogu na główną domenę. Niestety po próbach zmian w Ustawieniach Ogólnych cała strona się posypała. Wgrałem przez FTP backup całego WordPressa, ale bez poprawy. Oczywiście nie moge się także zalogować do panelu administracyjnego. Pytanie, czy istnieje szansa na podmianę jakiegoś pliku, który przywróciłby Ustawienia Ogólne do stanu sprzed zmian, jakie wykonałem?

  • Aleksander

    Witam,
    trochę pomieszałem w instrukcji i korzystając z cpanel, po przeniesieniu plików index.php i .htaccess z folderu /wordpress do folderu głownego strony i przywróceniu ich z powrotem do folderu /wordpress strona wyrzuca następujacy błąd (oczywiście pominąłem wyboldowane przez autora PRZEKOPIUJ….) :
    Parse error: syntax error, unexpected T_STRING in /home/aegee/public_html/wordpress/wp-includes/load.php on line 1073
    {ciekawostką jest to, że plik load.php ma u mnie ledwo 100 linijek…}

    index.php :

    <?php

    define(‚WP_USE_THEMES’, true);

    require( dirname( __FILE__ ) . ‚/wp-blog-header.php’ );

    .htaccess :

    # BEGIN WordPress

    RewriteEngine On

    RewriteBase /wordpress/

    RewriteRule ^index.php$ – [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /wordpress/index.php [L]

    # END WordPress

    # Wordfence WAF

    Require all denied

    Order deny,allow

    Deny from all

    # END Wordfence WAF

    PS: Używałem darmowej wersji plugina Wordfence.

    • Aleksander

      EDIT: Coś się skopało z kopiowaniem… :

      index.php :

      <?php

      define(‚WP_USE_THEMES’, true);

      require( dirname( __FILE__ ) . ‚/wp-blog-header.php’ );

      .htaccess :

      # BEGIN WordPress

      RewriteEngine On

      RewriteBase /wordpress/

      RewriteRule ^index.php$ – [L]

      RewriteCond %{REQUEST_FILENAME} !-f

      RewriteCond %{REQUEST_FILENAME} !-d

      RewriteRule . /wordpress/index.php [L]

      # END WordPress

      # Wordfence WAF

      Require all denied

      Order deny,allow

      Deny from all

      # END Wordfence WAF

      • Aleksander

        Sorry za spam, plik opisany wyżej to oczywiście .htaccess

    • Plik ‚wp-includes/load.php’ ma trochę ponad 1000 linii – Ty pewnie zajrzałeś wp-load.php.

      Błąd, który dostajesz, może mieć związek ze starą wersją PHP na Twoim serwerze. Może też mieć związek z uszkodzeniem pliku podczas kopiowania, ale wątpię w to.

  • Michal

    Rozumiem, że katalog, w którym jest WordPress powinien być bez separacji?
    Korzystałem z tego sposoby kilka razy, zawsze skutecznie. Teraz mam nieco inną sytuację – w katalogu głównym funkcjonuje „stara strona” (nie na WordPressie), dostępna w domenie mojadomena.pl. W katalogu pracuję nad „nową stroną” (WordPress), którą chcę podpiąć pod tę domenę po skończeniu prac. „Stara strona” w katalogu głównym ma htaccessa, który modyfikuje mi wygląd linków na nowej stronie. Nowa strona główna wyświetla się pod adresem: mojadomena.pl/katalog/ (czyli ok), ale wszystkie podstrony mają urle: mojadomena.pl/katalog/index.php/strona1/ itd. W ustawieniach bezpośrednich odnośników WordPressa zawsze dopisywany jest index.php. Mam obawy czy jak już „podepnę” WordPressa pod domenę główną, mimo, że nadpiszę obecnego htaccessa nowym, będą jakieś problemy z linkami na nowej stronie. Myślałem o pracy nad nową stroną w katalogu z separacją, ale zapewne wtedy opisany wyżej sposób wyświetlania pod domeną główną strony zamieszczonej w katalogu nie zadziała?

    • Ja bym się w ogóle nie przejmował URLami strony w wersji deweloperskiej. Nie potrzebujesz niczego dodawać ani zmieniać w htaccess w katalogu głównym – po prostu traktujesz adres ‚mojadomena.pl/katalog/’ jako katalog główny (htaccess znajdzie się w tym katalogu), a potem bez problemu zmienisz sobie URLe w konfiguracji WP i w bazie danych. Szkoda czasu na zajmowanie się takimi rzeczami. ;)

      • Michal

        Tak zrobię, dzięki. Świetny blog btw.

  • Karol

    Witam

    Czy istnieje taka możliwość aby zainstalować wordpressa w podkatalogu np.
    mojsklep.pl/blog ?
    Chodzi o to aby mieć w głównym katalogu domeny sklep internetowy a w podkatalogu blog na wordpresie.
    Wiem, że bez problemu mógłbym stworzyć subdomenę i właśnie tam zainstalować wordpressa i prowadzić np bloga ale chodzi o to, że chyba lepiej dla SEO i pozycjonowania domeny głównej będzie jeżeli blog z treściami tematycznymi będzie w podkatalogu – mojsklep.pl/blog.

    • Oczywiście, że można – po prostu wrzucasz pliki WordPressa do katalogu ‚blog’ na serwerze.