如何使用.htaccess同时使用RewriteCond和RewriteRule中的变量

时间:2014-02-21 12:28:41

标签: apache .htaccess mod-rewrite redirect

  1.   

    我有一个htaccess代码,可以重定向来自的所有请求   / forum1 / product to / product。 /forum1/product/.htaccess中的代码如下:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^(.*)$ /product/$1 [PT,L]
    </IfModule>
    
         

    此代码适用于“/ forum1 / product /”,“/ forum2 / product /”,   “forum3 / product /”,...等所以我所有的论坛都使用相同的产品   代码(我也在产品代码中使用了$ _SERVER ['HTTP_REFERER']   该产品对每个论坛都有明显的反应。)

  2. 2

      

    我有一个新版本的产品,我不想现场直播。   所以我试图设置一个cookie“版本”并基于它的版本   应重定向到相应的product_&lt;版本号&gt;文件夹   参考:
      How to do htaccess redirect based on cookie value

      RewriteCond %{HTTP_COOKIE} ^version=([0-9]*)$ [NC] 
      RewriteRule .* http://localhost/product_%1/ [R=301,L]
      RewriteRule .* http://local-host/product/ [R=301,L]
    

    1和2分别很好地工作。我想合并这两个条件。

    因此,如果cookie“version”设置为2,那么/ forum / product会重定向到/ product_2,但仍显示URL /论坛/产品,但它将使用/ product_2

    文件夹结构如下:

    /forum1/product/.htaccess
    /forum2/product/.htaccess
    /forum3/product/.htaccess
    /product/version.txt
    /product_1/version.txt
    /product_2/version.txt
    

    我认为以下代码应该有效:

    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_COOKIE} ^version=([0-9]*)$ [NC]
    RewriteRule ^(.*)$ /product_%1/$1 [PT,L]
    RewriteRule ^(.*)$ /product/$1 [PT,L]
    

2 个答案:

答案 0 :(得分:1)

得到解决方案:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_COOKIE} ^version=([0-9]*)$ [NC]
RewriteRule ^(.*)$ /product_%1/$1 [PT,L]
RewriteRule ^(.*)$ /product/$1 [PT,L]

答案 1 :(得分:0)

您可以使用:

RewriteEngine On

RewriteCond %{HTTP_COOKIE} version=([0-9]+) [NC] 
RewriteRule ^ /product_%1/ [L]

RewriteRule ^(.+)$ /product/$1 [L]