1

我找不到任何人询问或回答我的具体情况。

我正在将具有大量静态产品和信息页面的旧电子商务站点移动到安装在新位置的新电子商务软件包(进入根目录中的新文件夹)。 http://domain.com变成http://domain.com/newstore

我知道我可以将整个站点重定向到新位置,但这不起作用,因为大部分新站点都是从电子商务软件动态运行的,并且产品页面地址甚至与旧站点都不接近。

我已经使用 RedirectMatch 为我知道需要重定向的所有产品页面创建了单独的重写,这很好。现在我需要我可能错过的任何页面来重定向到新商店的主页,但我显然无法重定向我不知道的内容。所以这是我的问题,我现在如何在不破坏我已有的 200 条 RedirectMatch 规则的情况下将任何剩余的页面重定向到主页?

4

1 回答 1

1

请注意,这RedirectMatch是 mod_alias,而不是 mod_rewrite。当两个模块的指令应用于相同的 URI 时,这两个模块并不总是能很好地相互配合。在不知道您的网站是如何设置的情况下,无法回答您的问题,但您可以使用 *mod_rewrite* 尝试类似的操作:

RewriteEngine On
# Check that the request isn't for an existing resource
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Check that the request isn't for the new store
RewriteCond %{REQUEST_URI} !^/newstore
# redirect to the new store
RewriteRule ^ /newstore/ [L,R]

这里的原因是,如果请求不是针对现有页面、图像、脚本,可能会导致 404,并且如果请求不是针对/newstore文件夹中的动态站点,那么我们将其重定向到/newstore/文件夹。

但就像我说的,你有 200RedirectMatch条指令,而 mod_alias 并不总是与 mod_rewrite 配合得很好。您可能需要将它们全部转换为重写规则,但这可能没有必要。例子:

RedirectMatch 301 ^/old-path/old-page.html$ /newstore/?page=123

将转化为:

RewriteRule ^/old-path/old-page.html$ /newstore/?page=123 [L,QSA,R=301]

所有这些重写规则**必须上述将所有 404 重定向到 /newstore* 的规则之前。因为它是一个“包罗万象”的规则,就像最后的手段一样,它需要在你所有的常规重定向之后。

于 2013-01-08T00:05:59.913 回答