0

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

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

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

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

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

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

任何帮助将不胜感激!

4

2 回答 2

0

这实际上使用单个非常简单RewriteRule(尽管您也可以通过添加 a 来限制基于域的重定向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 上传递查询字符串时才会发生重写。

于 2013-07-23T09:19:35.000 回答
0

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

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

RewriteRule (?!^all/)^(.*)$ /all/$1 [L,R=301,NC]
于 2013-07-23T10:20:53.913 回答