0

我有一堆来自最近更新到 EE2 的旧网站的 URL。这些 URL 如下所示:
http ://www.example.com/old/path.asp?dir=Folder_Name

这些 URL 需要重定向到:
http ://www.example.com/new_path/folders/folder_name

并非所有Folder_Name字符串都与folder_nameURL 段匹配,因此这些很可能需要静态重定向。

我为名为“Example_One”的特定文件夹尝试了以下规则,该文件夹映射到新站点上名为“example1”的页面:

Redirect 301 /old/path.asp?dir=Example_One
             http://www.example.com/new_path/folders/example1

但这不起作用。我没有重定向,而是收到一个 404 错误,告诉我找不到http://www.example.com/old/path.asp?dir=Example_One 。

编辑:
这里还有一个次要问题,可能相关也可能不相关:我有一个看起来像这样的包罗万象的规则:
redirect 301 /old/path.asp http://www.example.com/new_path

使用该规则,像上面第一个这样的请求将被重定向到:
http ://www.example.com/new_path?dir=Folder_Name ,这会触发 404 错误。

4

1 回答 1

0

只需要多搜索一下 Google 即可找到 mod_rewrite 的正确语法。

使用上面的示例:

RewriteCond %{QUERY_STRING} ^dir=Example_One$
RewriteRule ^/old/path\.asp$ /new_path/folders/example1? [R=301,L] 

这解决了上述两个问题——关于为什么 EE 在查询字符串中使用一个参数进行 404 处理,该问题仍未解决,但这可以作为该问题的解决方法。

您还可以将 URL 重定向到特定页面,其中参数可能每次都具有不同的值。其中一个示例是 Google UTM 广告系列跟踪(在这种情况下,跟踪查询字符串会触发 404):

链接:http ://www.example.com/?utm_source=xxx& .....(触发 404)
应该重定向到:http ://www.example.com

RewriteCond %{QUERY_STRING} ^utm_source=
RewriteRule ^$ http://www.example.com? [R=301,L] 

注意:这只会将这些请求重定向到主页,由 ^$ 定义。如果要将 utm 请求重定向到不同的页面,则需要更改该 RewriteRule 的第一部分。

于 2010-12-28T18:55:21.623 回答