用htaccess很难改变和分离REQUEST_URI

时间:2014-10-04 21:26:34

标签: .htaccess request-uri

我尝试使用htaccess和%{REQUEST_URI}参数处理网址。我研究了很多,使用htaccess.madewithlove.be和一个虚拟机来构建规则并测试没有成功。

请求网址为:

  

1)www.example.com.br/category/product/Beer?id=16

提供更好理解的请求网址的示例:

  

2)www.example.com.br/category/product/Wine?id=33

我创建的规则是:

RewriteCond %{HTTP_HOST} ^(.*)example\.com\.br$
RewriteCond %{REQUEST_URI} ^(.*)category/product/(.*)$
RewriteRule ^(.*)$ http://www.mynewsite.com.br/category/product/luxe-product/$1? [R=301,L]

预期的重写是:

  

1)www.mynewsite.com.br/category/product/luxe-product/Beer

     

2)www.mynewsite.com.br/category/product/luxe-product/Wine

但是,使用此规则输出URL为:

  

1)www.mynewsite.com.br/category/product/luxe-product/category/product/Beer

     

2)www.mynewsite.com.br/category/product/luxe-product/category/product/Wine

在这种情况下,我几乎没有将类别/产品放在输出中以简化,因为我无法使用$ 0,$ 1和$ 2指令分开。任何人都知道如何解决这个问题?

此致

1 个答案:

答案 0 :(得分:0)

REQUEST_URI您不需要条件,因为您可以在RewriteRule中对其进行匹配。

相反,您可以使用此规则

RewriteCond %{HTTP_HOST} example\.com\.br$ [NC]
RewriteRule ^category/product/([^/]+)$ http://www.mynewsite.com.br/category/product/luxe-product/$1? [R=301,L]

或者你可以像你一样使用REQUEST_URI(两者都是正确的)

RewriteCond %{HTTP_HOST} example\.com\.br$ [NC]
RewriteCond %{REQUEST_URI} ^/category/product/([^/]+)$ [NC]
RewriteRule ^ http://www.mynewsite.com.br/category/product/luxe-product/%1? [R=301,L]