答案 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-alias的RedirectMatch
指令,这是RedirectMatch 301 ^/folder/?$ http://example.com/newfolder/
的默认模块。 apache httpd服务器。
/folder/
这将会将/newfolder/
重定向到glm
。