我刚刚为www.wildchildclothes.com重新设计了一个新的URL结构。旧站点在Zen Cart上运行,并且URL结构错误。以下是我想要重定向的一些示例:
OLD:www.wildchildclothes.com/page.html?chapter=1&id=21 新:www.wildchildclothes.com
和...
OLD:www.wildchildclothes.com/index.php?main_page=faq_info&fcPath=0&faqs_id=13 新:www.wildchildclothes.com/customer-service.html
以下是我的.htaccess中实现此目的的内容:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^([^&]*&)*chapter=1(&|$)
RewriteCond %{QUERY_STRING} ^([^&]*&)*id=21(&|$)
RewriteRule ^page\.html http://www.wildchildclothes.com? [L,R=301]
RewriteCond %{QUERY_STRING} ^([^&]*&)*main_page=faq_info(&|$)
RewriteCond %{QUERY_STRING} ^([^&]*&)*fcPath=0(&|$)
RewriteCond %{QUERY_STRING} ^([^&]*&)*faqs_id=13(&|$)
RewriteRule ^index\.php$ http://www.wildchildclothes.com/customer-service.html? [L,R=301]
但这根本不起作用 - 我只是被发送到我的404页面而不是开始重定向。任何人都能解释一下吗?完整的.htaccess发布在下面。
非常感谢, 约拿
答案 0 :(得分:2)
以上解决方案均不适合我,但确实如此:
将www.wildchildclothes.com/page.html?chapter=1&id=21重定向到www.wildchildclothes.com:
RewriteCond %{query_string} chapter=1&id=21
RewriteRule (.*) http://www.wildchildclothes.com/? [R=301,L]
将www.wildchildclothes.com/index.php?main_page=document_product_info&products_id=280重定向至www.wildchildclothes.com:
RewriteCond %{query_string} main_page=document_product_info&products_id=280
RewriteRule (.*) http://www.wildchildclothes.com/? [R=301,L]
将www.wildchildclothes.com/index.php?main_page=faq_info&fcPath=0&faqs_id=9重定向至www.wildchildclothes.com/customer-service.html:
RewriteCond %{query_string} main_page=faq_info&fcPath=0&faqs_id=9
RewriteRule (.*) http://www.wildchildclothes.com/customer-service.html? [R=301,L]
我确信有更好的方法可以做到这一点,但这对我有用.htaccess让我头疼,所以我不再深入研究。
我希望这可以帮助其他人!
答案 1 :(得分:0)
如果您使用PHP进行重定向,那将会更容易也更好。例如,您可以将此类请求重写为分析URL参数并重定向到正确页面的PHP脚本。也许是这样的:
// old-to-new.php
$rules = array(
array(
array('chapter' => '0', 'id' => '23'), // old URL parameters
'/customer-service.html' // new URL
),
// …
);
foreach ($rules as $rule) {
if (array_intersect_assoc($rule[0], $_GET) == $rule[0]) {
header('Location: http://example.com'.$rule[1], true, 301);
exit;
}
}
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
exit;
以及相应的RewriteRule
:
RewriteRule ^page\.html$ old-to-new.php [L]
答案 2 :(得分:0)
您希望在查询参数中允许多个字符。将[^&]&
更改为[^&]*&
:
RewriteCond %{QUERY_STRING} ^([^&]*&)*chapter=1(&|$)
RewriteCond %{QUERY_STRING} ^([^&]*&)*id=21(&|$)
RewriteRule ^page\.html$ http://www.wildchildclothes.com? [L,R=301]
RewriteCond %{QUERY_STRING} ^([^&]*&)*main_page=faq_info(&|$)
RewriteCond %{QUERY_STRING} ^([^&]*&)*fcPath=0(&|$)
RewriteCond %{QUERY_STRING} ^([^&]*&)*faqs_id=12(&|$)
RewriteRule ^index\.php$ http://www.wildchildclothes.com? [L,R=301]