it-swarm-eu.dev

Přesměrování 301 namísto 404, když je URL předponou příspěvku nebo názvu stránky?

ahoj všichni! Mám zvláštní problém s směrováním adres URL. když požádám o adresu URL, která neexistuje, např. http: // localhost/foo , wordpress správně vrátí 404. Nicméně, pokud je tato URL předponou příspěvku nebo názvu stránky, místo toho vrátí přesměrování 301 na příspěvek nebo stránku.

například, pokud mám příspěvek na 10/1/2010 s názvem Food Post, vrátí 301 s umístěním: http: // localhost/2010-10-01_food_post (moje struktura permalink). podobně, pokud mám stránku s názvem Food Page, vrátí 301 s Location: http: // localhost/food_page .

můžete to vidět v akci na mém živém webu, http://snarfed.org/ . např. http://snarfed.org/foo redirects to http://snarfed.org/2009-10-30_food_highlights .

vypnutí permalinků (tj. přepnutí na "default") to opraví, jak pro příspěvky, tak pro stránky, ale samozřejmě to opravdu nechci dělat.

vidím to na třech různých instalacích, všechny wordpress 3.0.1 a Apache 2.2, dva ubuntu lucid/mysql 5.1 a jeden freebsd 7.3/mysql 5.0. Deaktivoval jsem všechny pluginy a odstranil všechno z mého .htaccess kromě řádků pro wordpress níže, doslovně, ale ne štěstí.

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

díky předem...

6
ryan

To je normální, je to proto, že redirect_canonical() , který zajišťuje, že jste vždy na "kanonické" URL (v souladu s vaší permalink strukturu), spustí redirect_guess_404_permalink() aby se nejlepší odhad na post když adresa URL je neúplná . Pokud tomu chcete zabránit, myslím, že nejlepší způsob je zavést do redirect_canonical filtru a vrátit false, pokud je 404. Něco takového:

add_filter('redirect_canonical', 'no_redirect_on_404');
function no_redirect_on_404($redirect_url)
{
    if (is_404()) {
        return false;
    }
    return $redirect_url;
}
15
Jan Fabry