Jakiś czas temu napisałem jak rozwiązać problem niedziałającego schedulera w WordPressie. Niestety, jak to zwykle bywa w świecie komputerów, jedno rozwiązanie rodzi kolejny problem. Tak się stało również w tym przypadku. Problem nie był może krytyczny, a raczej kosmetyczny. Nie mniej jednak bardzo rzucał się w oczy.

Okazało się bowiem, że alternatywna wersja crona, którą uruchamiamy zgodnie z instrukcją we wspomnianym wyżej artykule, dodaje do adresu URL parametr doing_wp_cron. W starszych wersjach WordPressa był to sam parametr, bez żadnej wartości. W nowszych, WordPress generuje również jakąś wartość, np: doing_wp_cron=1366691575.5944859981536865234375. Całość sprawiała, że co jakiś czas, próbując dostać się do mojej strony pod bardzo prostym adresem:

prondzyn.com

zostawałem automatycznie przekierowany pod jakże uroczy URL:

prondzyn.com?doing_wp_cron=1366691575.5944859981536865234375

Po krótkim googlowaniu znalazłem rozwiązanie. Z pomocą przyszedł plik konfiguracyjny Apache’a: .htaccess. Należy dodać go do głównego katalogu, w który znajduje się nasz blog. To co jest nam w nim potrzebne, to dosłownie cztery linijki:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^doing_wp_cron(.*)$ [NC]
RewriteRule (.*) /$1? [R=301,L]

Powyższy kod sprawia, że każde odwołanie się do danej strony z parametrem doing_wp_cron zostanie automatycznie przekierowane do tej samej strony, ale już bez niechcianego parametru.

W rezultacie, po kliknięciu na poniższy link:

prondzyn.com?doing_wp_cron=NIECHCIANY_PARAMETR

zostaniecie automatycznie przekierowani do:

prondzyn.com

Bardzo prawdopodobne jest, że w naszym katalogu głównym znajduje się już plik .htaccess, który został stworzony podczas instalacji WordPressa. W takim przypadku trzeba go delikatnie zmodyfikować (najważniejsza jest kolejność poleceń). Finalna wersja powinna wyglądać podobnie do poniższej:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^doing_wp_cron(.*)$ [NC]
RewriteRule (.*) /$1? [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Więcej informacji na ten temat można znaleźć tutaj.