请注意,这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* 的规则之前。因为它是一个“包罗万象”的规则,就像最后的手段一样,它需要在你所有的常规重定向之后。