重写之前htaccess 301重定向并删除查询字符串

时间:2014-04-17 15:26:30

标签: .htaccess redirect

我根据用户输入的内容有两个重写条件。第一个是我们列出的公司,第二个是我们没有列出的公司。

RewriteRule ^companies/([^/]+)/([0-9]+)/$ %{DOCUMENT_ROOT}/index.php?action=companies&param=$1&articleId=$2 [NC,L,B]
RewriteRule ^companies/([^/]+)/$ %{DOCUMENT_ROOT}/index.php?action=companies&param=$1&articleId=0 [NC,L,B]

我发现了一些常见的拼写错误,例如'm& s'而不是'mark& s; spencer'所以我想301将用户直接重定向到那里,例如

301重定向:http://www.example.com/companies/m&s/http://www.example.com/companies/marks- \& -spencers / 557 /

我在各个地方的htaccess中使用过它:

redirectMatch 301 ^/companies/m&s/$ http://www.example.com/companies/marks-\&-spencers/557/

但是,生成的网址为http://www.example.com/companies/marks-&-spencers/557/?action=companies&param=aldie&articleId=0

如何在没有查询字符串的情况下显示它,因此它只是http://www.example.com/companies/marks-&-spencers/557/

1 个答案:

答案 0 :(得分:1)

如果你的Apache版本是> = 2.4,你可以使用标志[QSD]来避免重写查询字符串:

RewriteRule ^companies/m&s/$ http://www.example.com/companies/marks-\&-spencers/557/ [R=301,QSD]

如果它是旧版本的Apache,您可以使用一个小技巧,在重写的URL的末尾添加一个询问标记,以获得一个空的查询字符串:

RewriteRule ^companies/m&s/$ http://www.example.com/companies/marks-\&-spencers/557/? [R=301]