HTACCESS 301使用变量重定向

时间:2013-07-23 01:22:07

标签: .htaccess magento mod-rewrite rewrite

我甚至不确定这是否可行,但由于网站结构发生变化,我们需要进行紧急更改,即ReWriteCond或其他网站更改。手动执行此操作将会有太多的URL到301一个接一个。 (千)。

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

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

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

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

和301将这些变量重定向到site.com/all /? * ,无论过滤时间有多长?

任何帮助都会受到超级赞赏!

2 个答案:

答案 0 :(得分:0)

使用单个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,这意味着只有在网址上传递查询字符串时才会进行重写。

答案 1 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule (?!^all/)^(.*)$ /all/$1 [L,R=301,NC]