首页 文章

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

提问于
浏览
-1

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

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

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

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

http://www.example.com/category/page.html ?&a=/category/subcategory/something/d/page/

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

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

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

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

2 回答

  • 0

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

    place in htaccess

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

    place in httpd.conf

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

    contents of /usr/local/apache/conf/redirect.map 键后跟一个空格,后跟目标

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

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

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

    它说要创建一个看起来像这样的URL:category / refine.cgi?&a = / foo / bar /

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

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

相关问题