【问题标题】:.htaccess 301 redirect page with no extension to a PHP page.htaccess 301 重定向页面,没有 PHP 页面的扩展名
【发布时间】:2012-09-20 22:30:16
【问题描述】:

我在将旧的 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

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

【问题讨论】:

  • 您可以发布您的解决方案作为答案,然后接受您自己的答案。这会将问题标记为已解决。

标签: linux .htaccess http-redirect


【解决方案1】:

试试:

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]

【讨论】:

  • 这让我更接近了,但也许我仍然做错了什么。我在更改上方进行了编辑,但还没有雪茄。
  • @user1687345 哦,你知道可能发生了什么......让我在我的编辑中解释一下
  • 我会试试看的。而且...只是澄清一下,该站点曾经是 WordPress,但现在只是一个基本的 php 站点,根本没有 WordPress。发生的事情是在 google 中找到的旧 url 已经死 404,所以我需要它们重定向到较新的 php 页面。
  • 我使用它并放弃了页面重定向,但仍然得到相同的结果。
  • 我通过返回简单的页面重定向但为非扩展页面名称添加正斜杠来使其工作。见上面的编辑