htaccess将根目录重定向到子目录,但允许根目录中的index.php运行


htaccess redirect root to subdirectory but allow index.php in root to function

这就是我们的情况:原始域名(比如www.example.com)是在WordPress中完成的,并安装在根目录中。我们使用Joomla创建了一个新网站,并将其放在一个子目录中(例如,www.example.com/PORTALsite)。

我已经能够使用htaccess中的以下代码成功地将根目录(www.example.com/)重定向到此子目录(www.example.com/PORTALsite):

RewriteEngine on
RewriteRule ^$ http://www.example.com/PORTALsite [R=301,L]

这很好,只是我们需要原始的WordPress网站(位于www.example.com/index.php的主页)才能正常工作。我们需要这一点,因为我们在这个WordPress网站中有数百个页面在搜索引擎中进行索引,我们希望所有的旧内容都能继续发挥作用。

上面的代码适用于根目录中的所有文件和子目录,允许我们的旧内容继续运行,并且它正确地将根目录本身(www.example.com/)重定向到新的Joomla网站的子目录(www.example.com/sPORTALSite)。

然而,问题是:如果直接访问旧的WordPress网站的index.php文件(即,如果有人在www.example.com/index.php中键入),我们仍然需要它来运行,但它不起作用。如果你转到www.example.com/index.php,它也会重定向到www.example.com/PORTALsite。尽管根目录中的所有其他文件仍然按照我们的要求运行。

让我确保我正确地解释了这一点:如果有人进入我们的域(www.example.com),它会按照我们的意愿重定向到新的Joomla网站(位于www.example.com/PORTALsite)。但是,如果你进入www.example.com/index.php(旧的WordPress网站主页),它也会重定向到新Joomla的子目录(www.example.com/PORTALsite),我们不希望发生这种情况。我们希望这样,如果直接访问根的index.php文件,它仍然可以正常工作(保持所有旧的WordPress内容不变)。

我们只希望对域名本身www.example.com的请求重定向到www.example.com/PORTALsite。但是,我们需要所有其他文件和子目录,包括www.example.com/index.php,才能正常工作(这样人们仍然可以访问旧WordPress网站的所有内容,以及许多静态页面)。

根目录(www.example.com/)中的所有文件和子目录仍然可以按照我们的意愿运行,但只是旧的WordPress网站主页(位于www.example.com/index.php)也会重定向到www.example.com/PORTALsite上的新网站(以及对域名本身的请求www.example.com)。因此,上面的代码非常接近于我们想要的工作。

我非常感谢StackOverflow的专业知识,也非常感谢我们能得到的任何帮助。提前谢谢!

更新:这是我们的HTACCESS文件中的代码:(使用"example.com"而不是真正的域名)

RewriteEngine on
RewriteRule ^$ http://www.example.com/PORTALsite [R=301,L]
# 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

根据下面的anubhava的回应,一旦我让WordPress停止从URL中删除"index.php",他的代码就应该可以工作了。谢谢你阿努巴瓦!这是整个文件。

替换此规则:

RewriteRule ^$ http://www.example.com/PORTALsite [R=301,L]

这个:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}'s/+['s?]
RewriteRule ^$ /PORTALsite [R=301,L]
  • 确保这是wordpress.htaccess中的第一条规则
  • 确保在不同的浏览器中进行测试,以避免301缓存问题
  • 更改WP的永久链接设置,使您的BLOG/Home URL为http://domain.com/index.php而不是http://domain.com/