【问题标题】:HTACCESS 301 Redirects with VariablesHTACCESS 301 使用变量重定向
【发布时间】:2013-07-23 01:22:07
【问题描述】:

我什至不确定这是否可行,但由于站点结构发生变化,我们需要紧急更改,即 ReWriteCond 或其他站点更改。 301 的 URL 太多了,无法手动执行此操作。 (数千)。

该网站的结构具有过滤功能,例如:

http://www.site.com/?brand=123

这可以被进一步过滤,所以它可以是 site.com/?brand=123&color=49&size=57 等等等等(甚至更长)

在不了解大量代码的情况下,是否可以将 site.com/?* 放入变量中

和 301 将这些变量重定向到 site.com/all/?* 而不管过滤多长时间?

任何帮助将不胜感激!

【问题讨论】:

    标签: .htaccess magento mod-rewrite rewrite


    【解决方案1】:

    使用单个RewriteRule 实际上非常简单(尽管您也可以通过添加RewriteCond 来限制基于域的重定向)。

    RewriteCond %{QUERY_STRING} !^$
    RewriteCond %{HTTP_HOST} (www\.)?example\.com
    RewriteRule ^$ http://example.com/all/ [QSA,R=301]
    

    这将执行重定向,并应将查询字符串添加到重定向 URL 的末尾:

    http://www.example.com/?brand=123&color=red
      =>  http://example.com/all/?brand=123&color=red
    
    http://example.com/?brand=123&color=red&size=colin
      =>  http://example.com/all/?brand=123&color=red&size=colin
    

    但是请注意,由于我们匹配的是一个空路径(规则中的 ^$),它不会重定向任何已经在 /all... 中的请求或其他任何内容:

    http://example.com/all/?brand=123      : not redirected
    http://example.com/index.php?brand=123 : not redirected
    

    如果您还想在请求的 URL 指向索引文件时重定向(我将使用 index.php 作为示例),您可以执行以下操作:

    RewriteCond %{QUERY_STRING} !^$
    RewriteCond %{HTTP_HOST} (www\.)?example\.com
    RewriteRule ^(index.php)?$ http://example.com/all/ [QSA,R=301]
    

    当然,您应该将“example.com”替换为您自己的域名,无论您在哪里看到它。

    编辑:我添加了一个额外的RewriteCond,这意味着只有在 URL 上传递查询字符串时才会发生重写。

    【讨论】:

    • 我使用了这个: RewriteCond %{HTTP_HOST} (www\.)?site\.com RewriteRule ^$ site.com/all-products [QSA,R=301] 它有效,但是,我不能转到主页,因为它会将我重定向到 site.com/all-products
    • 啊,所以如果有查询字符串(?brand=123... 部分),你只想要重写?我已经更新了我的答案。
    • 嗨 icabod,如果你喜欢,我还有一个:stackoverflow.com/questions/17820228/…
    【解决方案2】:

    通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteRule (?!^all/)^(.*)$ /all/$1 [L,R=301,NC]
    

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      相关资源
      最近更新 更多