linux - .htaccess 301 重定向页面,没有扩展到 PHP 页面

标签 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

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

最佳答案

尝试:

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]

关于linux - .htaccess 301 重定向页面,没有扩展到 PHP 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12521844/

相关文章:

linux - 了解自动变量在 make/makefile 中的作用

通过脚本解析Linux日志文件语法

php - 只允许通过应用程序访问 PHP 文件

delphi - 在Delphi TWebmodule中获取完整的URL

linux - 为什么 tail 在这里不起作用?

php - 错误 : PleskFatalException: StatInfo->getActiveDomainsNumber() failed: sysinfo failed: sh:/usr/local/psa/admin/bin/sysinfo: Permission denied

regex - .htaccess在根目录和子文件夹中,每个都重定向到自己的index.php

regex - RewriteCond 无法对 HTTP_HOST 强制使用 https

ssl - CAS 证书更改后无限循环