用不同的格式重写规则301

时间:2017-07-19 10:22:46

标签: mod-rewrite subdirectory

好的,所以我需要找到我想要做的正确语法。

这些链接:

http://www.example.com/sub1/sub2/product1/
(...)
http://www.example.com/sub1/sub2/product700/

需要重定向到

http://www.example.com/sub3/product1-newsite/
(...)
http://www.example.com/sub3/product700-newsite/

我尝试过:

RewriteEngine On
RewriteRule ^/sub1/(.*)/(.*)$ http://www.example.com/subdir/$1-newsite/ [R=301,L]

适用于所有700种产品。 另外,我需要对某些产品进行检查。

有人能看出我做错了吗?

1 个答案:

答案 0 :(得分:0)

我认为这只是正则表达式上的编号问题。

$ 1是第一个匹配的组,$ 2是第二个,等等。$ 0表示匹配的整个字符串(即整个路径)。

尝试:

RewriteEngine On
RewriteRule ^/sub1/sub2/(.*)$ http://www.example.com/subdir/$1-newsite/ [R=301,L]

RewriteEngine On
RewriteRule ^/sub1/(.*)/(.*)$ http://www.example.com/subdir/$2-newsite/ [R=301,L]

修改

啊......有一个想法......捕获中的第一个正则表达式可能有点过于贪婪...因为它可以匹配:

^/sub1/[sub2/product1-newsite]/[]因此$ 1将为sub2/product1-newsite而$ 2将为空(。*可以很高兴地匹配任何内容)。

所以我们需要确保它不会抓得太多。

RewriteEngine On
RewriteRule ^/sub1/([^/]+)/(.+)/$ http://www.example.com/subdir/$2-newsite/ [R=301,L]

*更改为+可确保我们至少匹配一个字符。

.更改为[^/]可确保我们匹配"除了/"之外的所有内容。

在最后添加/以确保$ 2不会捕获尾随斜杠。

应该有希望解决它。