我有一个博客,可以说example.com
,另一个博客example.com/np
不是多站点,而是不同的 WordPress 安装。
我想要的是将example.com
主页仅重定向到example.com/np
. 如果该重定向是 301 永久移动重定向,那就太好了。
如果我将 301 重定向放在 WordPress 头文件中header.php
,它将重定向每个页面。如果我检查页面是否是主页并尝试 301 重定向,这是不可能的,因为标题重定向应该放在顶部。
如何做到这一点?
由于您处于 WordPress 的上下文中,因此您可以利用其重定向功能。
像这样(在functions.php中):
function redirect_homepage() {
if( ! is_home() && ! is_front_page() )
return;
wp_redirect( 'http://redirect-here.com', 301 );
exit;
}
add_action( 'template_redirect', 'redirect_homepage' );
将以下内容放入您的functions.php
文件中:
add_action( 'get_header', 'so16738311_redirect', 0 );
function so16738311_redirect()
{
if( is_home() || is_front_page() ) {
wp_redirect( home_url( '/np/' ), 301 );
exit;
}
}
您不想为此混淆您的 Wordpress 模板或代码,只需在您的 : 中使用单个 mod_rewrite 规则.htaccess
:
RewriteRule / /np [R=301,L]
如果它已经存在,则将其放在该RewriteEngine on
行下方,否则将其作为单独的一行添加到该行上方RewriteRule
。
此解决方案易于移除、易于维护、可移植,并且比在模板或 WP 代码中使用 PHP 执行的性能更好,并且可以在模板更新后继续存在。
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (.*) http://www.Your domain/$1 [R=301,L]
</IfModule>
# 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
您可以使用带有状态码的 WordPress 的wp_redirect功能。在 wordpress 初始化钩子上添加以下代码
if ( is_home() ) {
wp_redirect( $location, $status );
exit;
}
您可以使用 Wordpress 功能来检测您是否在主页上:
is_home
<?php
if ( is_home() ) {
// This is a homepage - 301 Redirect
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.example.com/np");
exit;
} else {
// This is not a homepage
}
?>
您可以使用is_home() 或is_front_page()函数来重定向您的主页。
index.php
只需将其放在您的 wordpress 安装文件的最顶部:
if($_SERVER['REQUEST_URI'] == "/"){
include('......server file directory to file you want to redirect to');
exit;
}