.htaccess 301重定向页面,没有PHP页面的扩展名

时间:2012-09-20 22:30:17

标签: linux .htaccess http-redirect

我在将旧的WordPress网站页面重定向到新的基本PHP网站页面时遇到问题。

示例:没有扩展名的旧WordPress页面位于http://example.com/levelone/leveltwo/pagename

新页面位于http://example.com/directory/pagename.php

以下是我尝试过的几件事:

redirect 301  /levelone/leveltwo/pagename http://example.com/directory/pagename.php

这根本不起作用

然后我尝试首先重定向目录,然后重新定向页面,如下所示:

RedirectMatch 301 ^/levelone/leveltwo/ http://example.com/directory/
redirect 301  /pagename http://example.com/pagename.php

这几乎有效,但给了我正确的URL但没有PHP扩展。

我不能只将旧目录重定向到新目录,因为实际上有很多。这个例子只有一个。问题似乎是从非扩展页面转到.php扩展名的页面。

这是我尝试过的另一件事:

RedirectMatch 301 ^/levelone/leveltwo/(.*)$ /directory/$1.php
redirect 301  /pagename http://example.com/pagename.php

这给了我http://example.com/directory/pagename/.php

已解决:我使用了以下内容:

Redirect 301 /levelone/leveltwo/pagename/ http://example.com/directory/pagename.php

问题似乎是旧页面名称后缺少正斜杠。

1 个答案:

答案 0 :(得分:0)

尝试:

RedirectMatch 301 ^/levelone/leveltwo/(.*)$ /directory/$1.php

可能发生的事情是mod_alias和mod_rewrite彼此之间的关系并不好。它们都在URI文件映射管道中,所以当一个人进行处理时,URI(尽管重定向响应最终会发生的事情)继续得到处理,然后当重定向发生时,URI被mod_rewrite破坏了

你应该坚持使用mod_rewrite,以便你可以阻止任何wordpress规则做它的事情。在htaccess文件中添加以上任何wordpress规则:

RewriteEngine On
RewriteRule ^/?levelone/leveltwo/(.*)$ /directory/$1.php [L,R=301]