htaccess - 跳过第一个文件夹并作为变量传递

时间:2017-03-16 10:59:46

标签: .htaccess mod-rewrite url-rewriting

我正在将网站更改为多语言网站:

  

example.com/en/view-item/sku /

     

example.com/es/view-item/sku /

     

example.com/de/view-item/sku /

需要将/ fr / part作为变量传递。

这个问题给出了一个非常好的答案:htaccess - skip first folder

但是,在我的htaccess文件中,我还有其他规则,例如:

  

RewriteRule view-item /([^/.]+)/?$ /shop/view.php?productcode=$1

     

RewriteRule product-category /([^/.]+)/?$ /shop/products.php?selectedcat=$1

问题是,使用......

  

RewriteRule ^(en | fr | es | de | nl | it)(/。*)$ $ 2?language = $ 1 [NC,L,QSA]

...当htaccess不编辑路径时有效,例如:

  

www.example.com/fr/shop/view.php?productcode=abc123

这会在ok上添加语言变量。

但是

  

www.example.com/fr/view-item/sku /

它不起作用,因为htaccess再次改变它。我想它已经占了/ fr / url会是这样的:

  

www.example.com/fr/view-item/sku /

  

www.example.com/view-item/sku/?language=fr

我对htaccess的了解不足以知道用什么代码再次传递语言变量。

我也试过......

  

RewriteRule ^(en | fr | es | de | nl | it)(/。*)$ $ 2 / $ 1 / [NC,L,QSA]

     

RewriteRule view-item /([^/.]+)/([^/.]+)/?$ /shop/view.php?productcode=$1&language=$2

这有效,但不适用于这些网址......

  

www.example.com/fr /

     

www.example.com/fr/shop/view.php?productcode=abc123

我假设第一个例子可行,如果我可以在以后编辑/ view-item /文件夹时传递?language = $ 1。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我刚刚找到了一个解决办法,基本上将上面的内容按不同顺序排列:

  

RewriteRule ^(en | fr | es | de | nl | it)/ view-item /([^/.]+)(/.*)$ /$1/shop/view.php?productcode=$2 [ NC,L,QSA]

     

RewriteRule view-item /([^/.]+)(/.*)$ /shop/view.php?productcode=$1

     

RewriteRule ^(en | fr | es | de | nl | it)(/。*)$ $ 2?language = $ 1 [NC,L,QSA]

虽然这不是我原来的问题所需要的,但是我认为我会在这里发布它。如果有人有任何更好的解决方案,请发帖,谢谢。

答案 1 :(得分:0)

有这样的话:

RewriteEngine On

RewriteRule ^(en|fr|es|de|nl|it)(/.*)$ $2?language=$1 [NC,L,QSA]

RewriteRule ^view-item/([^/.]+)/?$ /shop/view.php?productcode=$1 [L,QSA,NC]

RewriteRule ^product-category/([^/.]+)/?$ /shop/products.php?selectedcat=$1 [L,QSA,NC]