将301从目录重定向到单个文件

时间:2011-10-15 21:22:30

标签: apache .htaccess redirect directory http-status-code-301

我在弄清楚应该简单的事情时遇到了一些麻烦。我想301将目录中的所有内容重定向到新位置的单个文件。

在我.htaccess中,我已尝试过以下内容......

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/index.html

这......

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/

这......

Redirect 301 /myDir http://www.mydomain.com/myNewDir

问题是每个文件都只是映射/myDir/中的每个文件,并将其附加到目标网址的末尾。

谷歌搜索后,我看到了一些据说要做的事情......

Redirect 301 ^/myDir(.*) http://www.mydomain.com/myNewDir

但这只是做同样的事情......它将现有文件位置映射到URL的末尾。

很容易在网上找到很多“。htaccess redirect”教程,但它们似乎只显示了诸如“一对一文件映射”或“一对一目录”这些明显的例子映射”。这些教程似乎也忽略了解释各种相关文件指令以及如何正确使用它们。

此特定主机帐户是垃圾并且还安装了FrontPage扩展。 Mod-rewrite失败(打破整个站点)但Redirect 301行运行正常。因此,在我将这个新的(非FrontPage)网站移动到更强大的托管帐户之前,我需要坚持使用Redirect 301一行内容。


如何使用Redirect 301/myDir/中的所有内容重定向到位于/myNewDir/index.html相同的单个文件? (如果可能的话,我更喜欢使用/myNewDir/)。 请详细解释解决方案中使用的文件指令。


更新

以前接受的答案无效。

示例:

RedirectMatch 301 /myDir1/(.*) http://mydomain.org/newpath/myDir1/index.html

...正在提供“尝试打开”错误时发生了太多重定向。

这是因为/myDir1/(.*)匹配字符串中的 anyplace ,因此如果目标网址在任何地方都包含/myDir1/,而不仅仅是根,它将被重定向到令人讨厌的循环中

请参阅我自己发布的答案以获得正确的解决方案。

2 个答案:

答案 0 :(得分:12)

我在一个旧项目中找到了答案。

Redirect 301对此完全错误。我真的很想RedirectMatch 301

RedirectMatch 301 ^/myDir/(.*) http://www.example.com/myNewDir/

<强>解释(S):

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

  

“此指令等同于Redirect,但使用标准   正则表达式,而不是简单的前缀匹配。“

http://www.zytrax.com/tech/web/regex.htm

  

“方括号外的^(抑扬或插入符号)表示仅查看   例如,目标字符串的开头将找不到^Win   STRING1中的Windows,但^Moz会找到Mozilla。“

和......

  

.(句号)表示此位置的任何字符,例如,   ton.会找到tonstonetonneau但不会wanton,因为它没有   跟随角色。“

和...

  

*(星号或星号)匹配前面的字符0或更多   例如,tre*会找到tree(2次)和tread次(1次)   和trough(0次)。

答案 1 :(得分:1)

试试这个:

RedirectMatch 301 /myDir/.* http://www.mydomain.com/myNewDir/index.html

参考:http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

就。*而言,RedirectMatch使用标准正则表达式,这意味着您可以捕获匹配的字符并在重定向规则中使用它们,将它们引用为$ 1,$ 2等。

在正则表达式中*表示前一个字符的任意数量的重复。 。 - 表示任何角色。所以组合。*说这个模式匹配任何数字的任何字符。因此*。 *表示此模式将匹配/ myDir和/ myDir /,仍然是/myDir/test.html。所以*。 *也可以使用