Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
htaccess将root重定向到子目录,但允许root中的index.php运行_Php_Wordpress_Apache_.htaccess_Joomla - Fatal编程技术网

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

htaccess将root重定向到子目录,但允许root中的index.php运行,php,wordpress,apache,.htaccess,joomla,Php,Wordpress,Apache,.htaccess,Joomla,这就是我们的情况:原始域名(比如www.example.com)是在WordPress中完成的,并安装在根目录中。我们使用Joomla创建了一个新网站,并将其放在一个子目录中(比如www.example.com/PORTALsite) 我已经能够使用htaccess中的以下代码成功地将根目录(www.example.com/)重定向到此子目录(www.example.com/PORTALsite): RewriteEngine on RewriteRule ^$ http://www.examp

这就是我们的情况:原始域名(比如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/PORTALsite)

然而,问题是:如果直接访问旧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)。我们不希望这种情况发生。我们希望这样,如果直接访问root的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”而不是真正的域名)

重新编写引擎打开
重写规则^$http://www.example.com/PORTALsite [R=301,L]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束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的永久链接设置,使您的博客/主页URL成为
    http://domain.com/index.php
    而不是
    http://domain.com/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+[\s?]
RewriteRule ^$ /PORTALsite [R=301,L]