htaccess将root重定向到子目录,但允许root和查询字符串中的index.php运行

时间:2013-12-16 19:19:03

标签: php wordpress .htaccess redirect joomla

我有一个与此类似的问题,并得到了解答。然而,答案导致另一个概念,现在我有以下问题。 (用户“anubhava”能够回答原始问题。)

让我解释一下,我们的情况是这样的:

我们正在使用Joomla推出一个新网站,但是,我们希望所有旧网站的入站链接继续运行(因为我们在旧网站上的WordPress中有很多内容)。因此,使用htaccess,我们能够将对主域名的所有请求重定向到其中包含新Joomla网站的子目录。 [例如,由于htaccess代码,www.example.com的请求被重定向到www.example.com/PORTALsite,这正是我们想要的。]

此外,此代码还允许对旧WordPress网站的主页的请求仍然起作用(我们正在替换的旧网站)。 [例如,www.example.com / index.php仍将运行并加载旧的WordPress网站,这正是我们想要的。]

仅当请求仅针对域名(www.example.com)时,它才会重定向到新的Joomla网站的主页(位于www.example.com/PORTALsite/),但如果请求是针对旧网站的主页(位于www.example.com/index.php)它将允许这个并加载旧的WordPress网站。

这是htaccess代码:

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+[\s?]
RewriteRule ^$ /PORTALsite [R=301,L]

但是,我现在的问题是这个:有许多入站链接,其中旧的WordPress网站的index.php页面被省略,只附加了一个查询字符串(表示页面上的页面名称)通过WordPress的旧网站)。但是,因为上面的代码将此视为仅对主域名的调用(因为它“忽略”查询字符串),所以它还将其重定向到新的Joomla网站。 我们不希望这种情况发生!有什么帮助吗?

现在出现问题的示例

  1. (不是问题)成功重定向了对主域名的请求 到新的Jooma网站,因此www.example.com将重定向到 www.example.com/PORTALsite,正如我们所希望的那样。

  2. (不是问题)www.example.com/index.php成功加载旧的WordPress 网站的主页虽然我们想要并且应该如此。

  3. 然而这是问题:入站链接没有文件名但包含 查询字符串,例如www.example.com/?page_id=56也正在获取 重定向到新的Joomla网站(例如,www.example.com / POSALsite /?page_id = 56)并且我们想要发生这种情况。

    我们希望www.example.com/?page_id=56重定向到 www.example.com/index.php?page_id=56并加载来自的内容 旧的WordPress网站。 如何根据上面的htaccess代码实现这一目标?

  4. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

RewriteEngine on
# Match requests for /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+[\s?]
# Don't match requests for page_id=n
RewriteCond %{QUERY_STRING} !page_id=[0-9]+
# Redirect to /PORTALsite
RewriteRule ^$ /PORTALsite [R=301,L]