[英]Redirect all pages except home page htaccess
我有一个 Wordpress 网站,我正在尝试将所有页面重定向到同一域上的登录页面,但主页除外。 我尝试了许多在互联网上找到的解决方案,但都没有奏效。
我需要的是:
提前致谢
您可以使用过滤器,允许您使用基于当前配置处理网站重定向的代码创建异常。
像这样的东西:
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']
获取部分网址:
输出$_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.