0

我有:

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]
4

2 回答 2

1

只需将您的代码更改为:

RewriteRule ^test/(.*)$ /$1 [R=301,L,NC]
于 2013-05-28T17:35:22.510 回答
1

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

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

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

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

这一行说把所有东西都改写到/test/目录中:

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

因此,不在测试目录中的所有内容都将被重写到测试目录。

如果您尝试专门删除单词 test 那么您将删除该!符号以尝试创建匹配项。既然你已经知道它被调用test了,甚至不需要让 Apache 执行这个查找“测试”,因为 Apache在 RewriteRule 之后处理 RewriteCond 语句(相当不直观)。

RewriteCond %{REQUEST_URI} ^/?test

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

RewriteRule ^test/([^/]+)/([^/]+)/? $1/$2/ [R=301,L,QSA]
于 2013-05-28T17:23:20.657 回答