301重定向从URL中删除文件夹

时间:2013-05-28 15:31:45

标签: .htaccess http-status-code-301

我有:

mydomain.com/folder-name/segment1/segment2

我想将其更改为:

mydomain.com/segment1/segment2

使用301重定向。

我试过了:

RewriteCond %{REQUEST_URI} !^/test/.*$
RewriteRule ^(.*)$  /test/$1 [L]

但它不起作用

这是我的htacess文件:

# #AddHandler application/x-httpd-php53 .php .php5 .php4 .php3

RewriteEngine on
RewriteBase /


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

2 个答案:

答案 0 :(得分:1)

问题第一部分的答案应该是这样的:

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/? $2/$3 [R=301,L]

您尝试过的第二个代码与您最初要求的相反。此行与不以/test/开头的任何内容匹配:

RewriteCond %{REQUEST_URI} !^/test/.*$

这一行表示取一切并将其重写到/test/目录:

RewriteRule ^(.*)$  /test/$1 [L]

因此,将测试目录中没有的任何内容重写到测试目录中。

如果您尝试专门删除单词test,则在尝试创建匹配时删除!符号。既然你已经知道它被称为test,那么就没有必要让Apache执行这个'test'的外观,因为Apache handles the RewriteCond statement after the RewriteRule(相当不直观)。

RewriteCond %{REQUEST_URI} ^/?test

您可以像这样专门化重写规则(我添加了[QSA]来捕获任何查询字符串:

RewriteRule ^test/([^/]+)/([^/]+)/? $1/$2/ [R=301,L,QSA]

答案 1 :(得分:1)

只需将您的代码更改为:

RewriteRule ^test/(.*)$ /$1 [R=301,L,NC]