2017-07-19 30 views
1

好吧,所以我需要为我想要的操作找到正确的语法。用不同的格式重写规则301

这些链接:

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种产品。 另外我需要对某些产品进行豁免。

有人可以看到我在做什么错吗?

+0

你重定向到什么地方(说)http://www.example.com/sub1/sub2/product1/? –

+0

我现在有700条规则: 重定向301/sub1/sub2/product1 http://www.example.com/sub3/product1-newsite 我的.htaccess现在差不多80千字节,正在寻找一种方法来缩小文件大小。 –

回答

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]/[] s $ 1将是sub2/product1-newsite和$ 2将是空的(。*可以愉快地匹配什么)。

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

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

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

.更改为[^/]确保我们匹配“除/之外的任何内容”。

在结尾添加/以确保$ 2不会捕获尾部斜线。

这应该有希望解决它。

+0

谢谢,但那不行。 第一个建议是没有选择的,因为每个产品的第二个子目录更改。 第二个建议不会重定向任何东西。有另一个想法? –

+0

更新了答案 –