我甚至不确定这是否可行,但由于网站结构发生变化,我们需要进行紧急更改,即ReWriteCond或其他网站更改。手动执行此操作将会有太多的URL到301一个接一个。 (千)。
该网站的结构具有过滤功能,例如:
http://www.site.com/?brand=123
这可以进一步过滤,所以它可以是site.com/?brand=123&color=49&size=57等等等(可能更长)
在不知道大量代码的情况下,是否可以将site.com /? * 放入变量
和301将这些变量重定向到site.com/all /? * ,无论过滤时间有多长?
任何帮助都会受到超级赞赏!
答案 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]