0

我刚刚对具有新 URL 结构的 www.wildchildclothes.com 进行了重新设计。旧站点在 Zen Cart 上运行,并且 URL 结构错误。以下是我想要重定向的一些示例:

旧:www.wildchildclothes.com/page.html?chapter=1&id=21 新:www.wildchildclothes.com

和...

旧: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 发布在下面。

非常感谢,乔纳

4

3 回答 3

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 只是让我头疼,所以我不再深入研究。

我希望这对其他人有帮助!

  • 约拿
于 2009-11-22T23:40:59.843 回答
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]
于 2009-11-12T19:04:36.847 回答
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]
于 2009-11-12T17:27:36.633 回答