我有一个WordPress的网站,我试图重定向所有网页到同一个域的登陆页面,除了主页。我尝试了许多解决方案,发现互联网上,但没有一个工作。我需要的是:
先谢了
xa9qqrwz1#
可能有更好的解决方案,但您可以尝试以下方法:您可以使用$_SERVER['REQUEST_URI']来获取URL的一部分:网址:www.example.com/abc/de输出$_SERVER['REQUEST_URI']:/abc/de然后可以使用<meta http-equiv="refresh" content="0; url=http://example.com/redirect-page" />进行重定向。所以是这样的:
$_SERVER['REQUEST_URI']
<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/" />'; }
ocebsuys2#
您可以使用筛选器,该筛选器允许您创建一个例外,该例外具有基于当前配置处理网站重定向的代码。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 );
HTTP访问:https://stackoverflow.com/a/38594600/19168006
编辑:您需要将该代码添加到您的主题functions.php
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。
is_admin()
请注意,但是,如果您没有使用子主题,并且您打开了自动更新,则当您的主题强制更新时,它可能会在某个时候被覆盖,您必须再次更新它。
更多说明:here
2g32fytz3#
在根.htaccess文件的顶部,# BEGIN WordPress注解标记 * 之前 * 尝试执行以下操作(您不需要重复RewriteEngine指令):
.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本身设置一个例外,否则将导致无休止的重定向循环。正则表达式 * 上的!前缀会否定 * 表达式,因此如果不匹配,则成功。请注意,与REQUEST_URI服务器变量不同,RewriteRulepattern 匹配的URL路径不以斜杠开头。如果您愿意,可以将上面的代码简化为一行代码(以可读性为代价):
/redirect-page
!
REQUEST_URI
RewriteRule
RewriteRule !^(index\.php|redirect-page|wp-admin($|/.*)|.+\.\w{2,4})?$ /redirect-page [R=302,L]
3条答案
按热度按时间xa9qqrwz1#
可能有更好的解决方案,但您可以尝试以下方法:
您可以使用
$_SERVER['REQUEST_URI']
来获取URL的一部分:网址:www.example.com/abc/de
输出
$_SERVER['REQUEST_URI']
:/abc/de然后可以使用
<meta http-equiv="refresh" content="0; url=http://example.com/redirect-page" />
进行重定向。所以是这样的:
ocebsuys2#
您可以使用筛选器,该筛选器允许您创建一个例外,该例外具有基于当前配置处理网站重定向的代码。
https://plugins.trac.wordpress.org/browser/simple-website-redirect/trunk/SimpleWebsiteRedirect.php#L113
大概是这样的:
HTTP访问:https://stackoverflow.com/a/38594600/19168006
编辑:您需要将该代码添加到您的主题
functions.php
这是第二个解决方案:也许不如一个理论上的、功能上的.htaccess解决方案(如果存在的话)那么优雅。
//重定向除一个页面ID之外的整个站点
如果您不想重定向管理部分,请删除!
is_admin()
&&将http://example.com替换为您希望重定向通信的目标。默认情况下,这将执行301(永久)重定向;如果您希望这是临时的,请将301更改为302。显然,请用9999替换您希望排除的页面ID。请注意,但是,如果您没有使用子主题,并且您打开了自动更新,则当您的主题强制更新时,它可能会在某个时候被覆盖,您必须再次更新它。
更多说明:here
2g32fytz3#
在根
.htaccess
文件的顶部,# BEGIN WordPress
注解标记 * 之前 * 尝试执行以下操作(您不需要重复RewriteEngine
指令):我还在例外中包括了“静态资产”(图像、CSS、JS -任何带有文件扩展名的东西),因为我认为
/redirect-page
将需要访问这些资产。当然,我们需要为
/redirect-page
本身设置一个例外,否则将导致无休止的重定向循环。正则表达式 * 上的
!
前缀会否定 * 表达式,因此如果不匹配,则成功。请注意,与
REQUEST_URI
服务器变量不同,RewriteRule
pattern 匹配的URL路径不以斜杠开头。如果您愿意,可以将上面的代码简化为一行代码(以可读性为代价):