WordPress 在其 htaccess 文件中有一个功能,如果文件名与现有源匹配,则执行自动重定向。
例如如果你输入http://rechnen-in-der-wolke.net/datensicherheit它将重定向到http://rechnen-in-der-wolke.net/datensicherheit-cloud-anbieter-hagel-it/
如何在不影响整体功能的情况下禁用此功能?
默认的 htaccess 文件如下所示:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我已经尝试删除 RewriteCond %{REQUEST_FILENAME} !-f
(没有任何变化)或RewriteCond %{REQUEST_FILENAME} !-d
(没有任何变化)或它们两者(重定向循环)。
答案1
我在这里找到了我的问题的解决方案:https://wordpress.stackexchange.com/questions/3326/301-redirect-instead-of-404-when-url-is-a-prefix-of-a-post-or-page-name
必须在 functions.php 中插入以下代码:
add_filter('redirect_canonical', 'no_redirect_on_404');
function no_redirect_on_404($redirect_url)
{
if (is_404()) {
return false;
}
return $redirect_url;
}
感谢所有帮助我的人!
答案2
Wordpress 不会随意重定向您的 URL - 但它会将每个旧 URL 与其创建的帖子一起存储,即使不再使用。
如果您更改了帖子 slug,Wordpress 会将旧 URL 重定向 (301) 到新 URL。这与 .htaccess 无关,这是 wordpress 的一个功能。不幸的是,我从未在 codex 中看到过此功能的正确记录。因此,我无法告诉您哪个 wp_core 函数执行此操作以及它位于核心中的哪个位置(您不想触碰核心,对吗?)。
以前使用的 slug 存储在数据库中的wp_postmeta
表中。检查_wp_old_slug
meta_key 列(实际的 slug 存储在 meta_value 列中)。如果您希望在特定情况下不发生此默认行为,则可以在此处删除值并搜索“已使用”的 URL。