Gdy tworzysz domyślną witrynę staging znajdującą się w podfolderze, WP STAGING ustawia opcję „Permalinks” witryny staging na „Plain” i wyłącza opcję „Post name permalinks”. Robi się to po to, by witryna staging poprawnie otwierała się na wszystkich typach serwerów.
Contents
Wersja Pro WP STAGING ma opcję „Keep permalinks”. Za każdym razem, gdy tworzysz nową witrynę staging i włączasz tę opcję, witryna staging używa dokładnie tej samej struktury permalinków co żywa witryna. Znajdziesz tę opcję w WP STAGING > Settings > Keep Permalinks.
Jeśli włączysz tę opcję, a witryna staging przekierowuje cię na żywą lub wyświetla błąd 404, postępuj zgodnie z tym artykułem!
Generalnie używanie prostych permalinków na witrynie staging jest w porządku. Często nie ma technicznej potrzeby włączania niestandardowych permalinków, by korzystać z witryny staging.
Niemniej, jeśli chcesz włączyć niestandardowe permalinki na witrynie staging, by mieć tę samą strukturę linków, najpierw musisz ustalić, jaki serwer webowy działa na twoim serwerze lub planie Hostingu.
Musisz uzyskać dostęp do panelu administratora witryny WordPress staging, by włączyć permalinki post name.
Jeśli próbujesz uzyskać dostęp do panelu administratora witryny staging, a witryna staging przekierowuje cię na żywą, dodaj slug wp-admin na końcu URL, np. https://example.com/stagingsite/wp-admin
Pozwoli ci to uzyskać dostęp do wp-admin witryny.
(Takie przekierowanie może wystąpić, jeśli używasz pluginów językowych, np. WPML lub Polylang, które dodają slug języka do URL. Te pluginy często potrzebują włączonych permalinków)
Serwer Apache
Jeśli serwer Apache obsługuje twoją witrynę, są duże szanse, że permalinki przyjazne dla wyszukiwarek działają bez dodatkowej pracy.
Po prostu włącz permalinki na stronie:
Witryna staging > wp-admin > Settings > Permalinks
Bardzo prawdopodobne, że zadziałają od początku.
Jeśli to nie daje oczekiwanego wyniku, a linki na witrynie staging zwracają błąd 400, utwórz nowy plik .htaccess i wklej go w katalogu głównym witryny staging przy użyciu klienta FTP lub pluginu menedżera plików.
Zawartość tego pliku powinna wyglądać tak:
# BEGIN WordPress
RewriteEngine On
RewriteBase /staging/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /staging/index.php [L]
# END WordPressZastąp podświetlony tekst staging nazwą podfolderu, w którym znajduje się witryna staging!
Serwer Apache | Multisites
Zwykle WP STAGING zajmuje się tym i wprowadza niezbędne zmiany w .htaccess, jeśli klonujesz WordPress multisite.
Następujące reguły zostaną umieszczone w pliku .htaccess w katalogu głównym witryny staging dla multisite w subdomenie i w podfolderze:
Multisite w subdomenie, np. staging.example.com
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]Multisite w podfolderze, np. example.com/staging
RewriteEngine On
RewriteBase /staging/
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]Zastąp podświetlony tekst staging nazwą podfolderu, w którym znajduje się witryna staging!
Serwer Nginx
Jeśli twoja witryna używa Nginx, najpierw spróbuj włączyć permalinki przyjazne dla wyszukiwarek na witrynie staging. Jeśli to nie zadziała, postępuj zgodnie z poniższymi krokami, by włączyć permalinki w Nginx.
Otwórz wp-admin i przejdź do Settings > Permalinks, a następnie wybierz Post name.
Aby przetestować, otwórz stronę główną witryny i kliknij dowolny link.
Jeśli strona otworzy się zgodnie z oczekiwaniem, skończyłeś. Jeśli zwraca błąd 404, użyj zaawansowanych kroków poniżej:
Utwórz nowy server block w nginx.conf, podobny do poniższego fragmentu:
location /staging{
try_files $uri $uri/ /staging/index.php?$args;
}Zastąp podświetlony tekst staging nazwą podfolderu, w którym znajduje się witryna staging!
Zmień też ścieżkę do pliku socket PHP, jeśli jest inna w twoim systemie. To ma dać tylko pomysł, co zmienić. Nie używaj tych wartości słowo w słowo bez sprawdzenia, czy konfiguracja NGINX różni się.
Pamiętaj, że potrzebujesz pełnego dostępu do serwera, by wykonać powyższe kroki. Jeśli nie wiesz, co robią te linie, najlepiej poprosić kogoś o pomoc lub pozostawić permalinki wyłączone.
Następnie należy zrestartować serwer Nginx i możesz cieszyć się witryną staging z włączonymi niestandardowymi permalinkami.
To zawsze będzie wymagać skonfigurowania konkretnego bloku Nginx z nazwą folderu witryny staging.
Innym opcjonalnym podejściem jest utworzenie server block i pozwolenie Nginx wykonać automatyczny rewrite, gdy WordPress jest ładowany z podfolderu:
# Matches /<folder>/... – except for WP core folders
location ~ ^/(?!wp-admin|wp-content|wp-includes)([a-zA-Z0-9_-]+)(?:/|$) {
set $first_seg $1;
# First try static files/folders …
try_files $uri $uri/ @maybe_staging;
}
# Checks whether /<folder>/index.php exists; if so, rewrite there,
# otherwise fall back to the live front controller.
location @maybe_staging {
if (-f $document_root/$first_seg/index.php) {
rewrite ^ /$first_seg/index.php?$args last;
}
rewrite ^ /index.php?$args last;
}Serwer NGINX Multisites
WordPress Multisites potrzebują nieco innej konfiguracji.
Poniżej znajdziesz przykładowy nginx.conf dla staging multisite w podfolderze.
Podświetliliśmy odpowiednie części. Po dodaniu tej konfiguracji do nginx.conf musisz zrestartować serwer NGINX.
Jeśli twój serwer używa NGINX i nie wiesz, gdzie dodać tę konfigurację, zapytaj dostawcę Hostingu.
Witryna staging w podfolderze, np. example.com/staging
server {
listen 80; listen [::]:80;
server_name example.com/staging;
root /var/www/multi; # This is the path to your multisite website
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;
rewrite ^/staging(/[^/]+)?(/wp-.*) /staging$2 last;
rewrite ^/staging(/[^/]+)?(/.*\.php)$ /staging$2 last;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location /staging/ {
try_files $uri $uri/ /staging/index.php?$args ;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass php7-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
}Zastąp podświetlony tekst staging nazwą podfolderu, w którym znajduje się witryna staging!
Witryna staging w subdomenie, np. staging.example.com
Jeśli twoja witryna staging znajduje się w subdomenie, możesz użyć tej samej konfiguracji co powyżej, ale z drobną modyfikacją:
server {
listen 80; listen [::]:80;
server_name staging.example.com;
# Below should be the path to your staging site
root /var/www/multi/staging;
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;
rewrite ^/(/[^/]+)?(/wp-.*) /$2 last;
rewrite ^/(/[^/]+)?(/.*\.php)$ /$2 last;
}
location / {
try_files $uri $uri/ /staging/index.php?$args ;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass php7-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
}Zastąp podświetlony tekst staging nazwą podfolderu, w którym znajduje się witryna staging.
Bitnami (Apache)
Jeśli używasz WordPress w instancji Bitnami, musisz wykonać dodatkowe kroki.
Permalinki post-name nie są obsługiwane od razu po wyjęciu z pudełka na instancjach WordPress Bitnami, ponieważ Bitnami nie używa .htaccess w głównym folderze witryny. Ignoruje każdy plik .htaccess tam.
Bitnami nie używa domyślnego pliku .htaccess w katalogu głównym witryny; zamiast tego wszystkie konfiguracje htaccess są dodawane do pliku: /opt/bitnami/apps/APPNAME/conf/htaccess.conf.
Jeśli więc chcesz, by permalinki działały, musisz zmodyfikować htaccess.conf
Przejdź do tego pliku i dodaj do niego następujące:
<Directory /opt/bitnami/apps/wordpress/htdocs/STAGING>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /STAGING/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /STAGING/index.php [L]
</IfModule>
</Directory>Inną opcją byłoby pozostawienie permalinków na ustawieniach plain – wtedy w ogóle nie musisz zmieniać htaccess.conf.
Microsoft Azure
Azure używa serwera Microsoft IIS i wymaga niestandardowego web.config w katalogu głównym witryny staging.
Najpierw musisz wyświetlić plik web.config na „żywej” witrynie i zanotować nazwę reguły z tej linii:
<rule name="WordPress: http://wordpress-arc.azurewebsites.net" patternSyntax="Wildcard">To WordPress: http://wordpress-arc.azurewebsites.net w tym przykładzie.
Następnie utwórz nowy plik web.config w katalogu witryny „staging” z następującą zawartością:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<remove name="WordPress: http://wordpress-arc.azurewebsites.net"/>
<rule name="staging" patternSyntax="Wildcard">
<match url="*"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php"/>
</rule></rules>
</rewrite>
</system.webServer>
</configuration>Upewnij się, że ta linia:
<remove name="WordPress: http://wordpress-arc.azurewebsites.net"/>ma tę samą nazwę reguły co zdefiniowana w pliku web.config żywej witryny, którą w naszym przykładzie była WordPress: http://wordpress-arc.azurewebsites.net.
Microsoft IIS
- Najpierw otwórz plik
web.configw katalogu głównym żywej witryny, aby zanotować tę linię:
<rule name=”WordPress: https://example.com/” patternSyntax=”Wildcard”>
Zwłaszcza nazwę reguły:WordPress: https://example.com/ - Następnie utwórz nowy plik
web.configw katalogu witryny staging z tym fragmentem kodu:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<remove name="WordPress: https://example.com/" />
<rule name="WordPress: https://example.com/staging" patternSyntax="Wildcard">
<match url="*"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php"/>
</rule></rules>
</rewrite>
</system.webServer>
</configuration>Upewnij się, że linia <remove name="WordPress: https://example.com/" /> ma to samo „name”, co masz w web.config na żywej witrynie.
I upewnij się, że ta linia <rule name="WordPress: https://example.com/staging" patternSyntax="Wildcard"> ma poprawną nazwę katalogu witryny staging.
