.htaccess 301重定向将查询附加到URL结尾

时间:2012-01-23 14:19:12

标签: .htaccess mod-rewrite url-rewriting http-status-code-301

我希望有人可以帮助解决一个不寻常的情况。

我的httpd.conf文件中有一个主要的重写规则,它处理我们所有的动态内容。该规则看起来像这样,并且工作正常:

RewriteRule ^(。)(/。 / d / [^.]*)$ /category/refine.cgi \?\& a \ = $ 2

我遇到的问题是,当我尝试使用.htaccess创建一个简单的301重定向时,查询参数会自动附加到URL的末尾,因此最终结果如下所示:

http://www.example.com/category/page.html&安培; A = /类别/子类别/东西/ d /页/

请注意,在使用.htaccess创建301重定向时,查询字符串会附加到URL。

我根据具体情况为此提供解决方案,但每次我想要进行简单的301重定向时,创建新规则都是不切实际的。

所以,我想知道我是否可以以任何方式编辑我的“主规则”,以便在使用.htaccess创建重定向时,查询参数不会附加到目标URL。

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

这就是你的规则定义它要做的事情:

RewriteRule ^(.)(/./d/[^.]*)$ /category/refine.cgi\?\&a\=$2

它表示要创建一个如下所示的网址: ?类别/ refine.cgi&安培; A = /富/酒吧/

如果您不希望发生这种情况,请将规则更改为:

RewriteRule ^(.)(/./d/[^.]*)$ /category/refine.cgi\?

答案 1 :(得分:0)

如果您有多个想要取消查询字符串值的简单重定向,您可以将所有重定向放在RewriteMap中(因为您已经可以访问httpd.conf),并且有一个.htaccess规则抑制查询字符串如下

放在htaccess中

#if there is a match in the map
RewriteCond ${redirect_map:$1} !=""
RewriteRule ^(.*)$ ${redirect_map:$1}? [R,L]

放在httpd.conf中

RewriteEngine On
RewriteMap redirect_map txt:/usr/local/apache/conf/redirect.map

/usr/local/apache/conf/redirect.map 的内容 键后跟一个空格,后跟目标

directory/subdirectory1/subdirectory2/ example/category7/subdirectory/file.html
directory4/subdirectory2/subdirectory9/ example/category5/subdirectory4/file332.html