使用URL中的“查询字符串”参数重定向URL

时间:2010-12-20 17:34:10

标签: apache .htaccess mod-rewrite expressionengine

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

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

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

我为名为“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无法找到。

修改
这里也存在次要问题,可能有也可能没有关系:我有一个看起来像这样的全能规则:
重定向301 /old/path.asp http://www.example.com/new_path

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

1 个答案:

答案 0 :(得分:0)

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

使用上面的例子:

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

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

您还可以将网址重定向到特定网页,其中参数每次都可能具有不同的值。其中一个例子是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的第一部分。