繁体   English   中英

重定向除主页 htaccess 以外的所有页面

[英]Redirect all pages except home page htaccess

我有一个 Wordpress 网站,我正在尝试将所有页面重定向到同一域上的登录页面,但主页除外。 我尝试了许多在互联网上找到的解决方案,但都没有奏效。

我需要的是:

  • 主页和 wp-admin 页面应始终可访问(example.com 和 examplecom/wp-admin)
  • 所有其他页面都应使用 302 代码重定向到 example.com/redirect-page

提前致谢

您可以使用过滤器,允许您使用基于当前配置处理网站重定向的代码创建异常。

https://plugins.trac.wordpress.org/browser/simple-website-redirect/trunk/SimpleWebsiteRedirect.php#L113

像这样的东西:

add_filter(
    'simple_website_redirect_should_redirect',
    function( $should_redirect, $url ) {

        if( home_url() === $url ) {
            return false;
        }

        return $should_redirect;   
    },
    10,
    2
);

Htaccess: https ://stackoverflow.com/a/38594600/19168006

编辑:您需要将该代码添加到您的主题functions.php

这是第二种解决方案:可能不如理论上的功能性 .htaccess 解决方案(如果存在)那么优雅。

// 重定向整个站点,除了一个页面 ID

add_action( 'template_redirect', 'pc_redirect_site', 5 );
function pc_redirect_site(){
    
    $url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
    $current_post_id = url_to_postid( $url );
    if ( ! is_admin() && ! is_page( 9999 )) { // Excludes page with this ID, and also the WordPress backend
        $id = get_the_ID();
        wp_redirect( 'http://example.com', 301 ); // You can change 301 to 302 if the redirect is temporary
        exit;
    } 
}

如果您不想重定向管理部分,请删除! is_admin() && 将http://example.com替换为您希望将流量重定向到的目的地 默认情况下,这会执行 301(永久)重定向; 如果您打算将其设为临时,请将 301 更改为 302 显然将 9999 换成您希望排除的页面 ID。

但是请注意,如果您没有使用子主题并且启用了自动更新,那么当您的主题强制更新并且您必须再次更新它时,它可能会在某个时候被覆盖。

更多解释: 这里

可能有更好的解决方案,但你可以试试这个:

您可以使用$_SERVER['REQUEST_URI']获取部分网址:

网址: www.example.com/abc/de

输出$_SERVER['REQUEST_URI'] : /abc/de

然后你可以使用<meta http-equiv="refresh" content="0; url=http://example.com/redirect-page" />来重定向。

所以是这样的:

if($_SERVER['REQUEST_URI'] != "" && $_SERVER['REQUEST_URI'] != "/wp-admin") {
   echo '<meta http-equiv="refresh" content="0; url=http://example.com/" />';
}

在根.htaccess文件的顶部尝试以下操作,# BEGIN WordPress注释标记之前(您不需要重复RewriteEngine指令):

# Redirect all pages except "homepage", "wp-admin" and static assets
RewriteCond %{REQUEST_URI} !^/redirect-page$
RewriteCond %{REQUEST_URI} !^/wp-admin($|/)
RewriteCond %{REQUEST_URI} !\.\w{2,4}$
RewriteRule !^(index\.php)?$ /redirect-page [R=302,L]

我还在例外中包含了“静态资产”(图像、CSS、JS - 任何带有文件扩展名的东西),因为我想/redirect-page将需要访问这些。

当然,我们需要对/redirect-page本身进行异常处理,否则会导致无限的重定向循环。

! 正则表达式上的前缀否定表达式,因此当它不匹配时它是成功的。

请注意,由RewriteRule模式匹配的 URL 路径不以斜杠开头,这与REQUEST_URI服务器变量不同。


如果您愿意,可以将上述内容简化为单行(以牺牲可读性为代价):

RewriteRule !^(index\.php|redirect-page|wp-admin($|/.*)|.+\.\w{2,4})?$ /redirect-page [R=302,L]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM