首页 > 解决方案 > 子文件夹/wp-admin 重定向问题中的 Wordpress

问题描述

一个 Wordpress 网站安装在一个子文件夹中,我们称之为my_site

我需要网站在访问域名时加载子文件夹内容(假设它是https://example.com),因此,我已经.htaccess像这样设置了我的文件:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_site/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_site/$1 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ my_site/index.php [L]

现在,就内容和整个网站而言 - 一切正常。问题是尝试通过直接登录到 WP 仪表板https://example.com/wp-admin

浏览器确实会加载标准的 WP 登录屏幕,但在输入我的凭据后,会显示相同的登录表单 - 就像我只是刷新了页面一样。

在第一次访问https://example.com/wp-adminURL 和尝试登录后,当我遇到“类似浏览器刷新”的行为时,浏览器中的 URL 字符串会自动设置为:

https://example.com/wp-login.php?redirect_to=https%3A%2F%2Fexample.com%2Fmy_site%2Fwp-admin%2F&reauth=1

相同的 URL 解码:

https://example.com/wp-login.php?redirect_to=https://example.com/my_site/wp-admin/&reauth=1

很明显,问题是my_site附加在redirect_to参数中,但我不知道如何摆脱它。

任何帮助是极大的赞赏!

PS WP_HOMEandWP_SITEURL变量的设置wp-config.php方式如下(针对 http 和 https):

$hostname = isset( $_SERVER['HTTPS'] ) && strtolower( $_SERVER['HTTPS'] ) == 'on' ? 'https' : 'http';
$hostname .= '://' . $_SERVER['HTTP_HOST'];
define( 'WP_HOME', $hostname );
define( 'WP_SITEURL', $hostname );

标签: phpwordpress.htaccess

解决方案


嘿所有你需要删除(www.)?从 RewriteCond 像这样

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{REQUEST_URI} !^/my_site/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_site/$1 
RewriteCond %{HTTP_HOST} ^example.com$ 
RewriteRule ^(/)?$ my_site/index.php [L]

其次,如果您通过URL 解码器解码您的 URL

https://example.com/wp-login.php?redirect_to=https%3A%2F%2Fexample.com%2Fmy_site%2Fwp-admin%2F&reauth=1

您会注意到my_site这是不允许重定向到 wp 仪表板的根本原因,因为在 htaccess 中您限制为example.com

一旦您从 URL 中删除my_site%2F并重新提交登录表单,您肯定会重定向到仪表板。

现在,您只需将重定向 URL 配置为 wp-admin,使其不包含实际的 wordpress 文件夹


推荐阅读