htaccess 301重定向文件夹,但不是子文件夹

时间:2011-10-26 11:29:47

标签: .htaccess redirect

我需要重定向:

http://example.com/folder

http://example.com/newfolder

但请离开:

http://example.com/folder/subfolder

它在哪里。这可能吗?如果不造成一堆重定向混乱,我似乎无法实现它。

6 个答案:

答案 0 :(得分:29)

Jestep上面的回答重定向“/ root-directory”但无法重定向“/ root-directory /”。这可以通过以下方式修复和简化:

RewriteCond %{REQUEST_URI} ^/folder/?$
RewriteRule (.*) /newfolder [R=301,L]

这将重定向“/ folder”和“/ folder /”,但保留所有子目录。

答案 1 :(得分:3)

也许:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/folder[/]?
RewriteCond %{REQUEST_URI} !^/folder/subfolder[/]?
RewriteRule (.*) /newfolder/$1 [R=301,L]

这应该重定向/文件夹到/ newfolder但是不要/文件夹/子文件夹

答案 2 :(得分:3)

我刚刚碰到了这个,这就是我提出的解决方案。我更喜欢这种方法,因为它不会重定向任何子目录。

RewriteCond %{REQUEST_URI} ^/root-directory[/]?
RewriteCond %{REQUEST_URI} !^/root-directory/+[/]?
RewriteRule (.*) http://www.example.com/ [R=301,L]

答案 3 :(得分:2)

我在这里尝试了其他方法并取得了成功。无论如何我都不是Apache的专家,但这里有一个简单的单行程,每次都适用于我。我只使用RedirectMatch而不是Redirect并包含一个非常简单的RegEx来结束匹配,或者就在尾部斜杠之前,这意味着子目录永远不应该作为匹配。

RedirectMatch 301 ^/folder[/]?$ /newfolder

答案 4 :(得分:1)

您使用的是哪台服务器? 例如,如果您使用apache并执行类似此操作

,则可以使用mod_rewrite
    RewriteEngine On
    RewriteOptions Inherit
    RedirectMatch permanent ^/folder/$ http://example.com/newfolder
    #I haven't tested the above redirect btw ^ 

并将其放在/ folder /目录中的.htaccess文件中(假设您可以更改apache的设置,这意味着您在该虚拟主机中有选项AllowOverride All)

以下是更多信息http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

答案 5 :(得分:0)

如果未启用mod-rewrite或您无法在服务器上使用RewriteRule指令,则可以使用mod-aliasRedirectMatch指令,这是RedirectMatch 301 ^/folder/?$ http://example.com/newfolder/ 的默认模块。 apache httpd服务器。

/folder/

这将会将/newfolder/重定向到glm