我想重定向(301)900个网址。我仔细地制作了整个列表,没有错误,但表现得像字符串替换。以这一行为例:
Redirect 301 /assortiment/artikelen_ingedeeld_per_branche/transporteurs_verhuisbedrijven3/Verhuisdekens____baal_a_25_stuks_.html?id=979 http://example.com/221-transport-en-verhuisbedrijven
还有这一行:
Redirect 301 /assortiment/ http://example.com/alle-producten
当我访问/assortiment/artikelen_ingedeeld_per_branche/transporteurs_verhuisbedrijven3/Verhuisdekens____baal_a_25_stuks_.html?id=979
时,它会重定向到/alle-productenartikelen_ingedeeld_per_branche/transporteurs_verhuisbedrijven3/Verhuisdekens____baal_a_25_stuks_.html?id=979
显示assortiment
- > alle-producten
在开头更换。好像它被重写为'str_replace',我看到发生了什么,但我根本就不理解.htaccess。
答案 0 :(得分:5)
第一次重定向什么也没做。您无法将查询字符串放在Redirect
中。第二个是按预期工作。 Redirect
的工作方式是"以"开头。做法。所以如果指令是:
Redirect /a /b
然后:
/a
会重定向到/b
/a/
会重定向到/b/
/abcd123
会重定向到/bbcd123
/a/b/c/d
会重定向到/b/b/c/d
此外,如果您的规则是:
Redirect /a/ /b
然后:
/a/
会重定向到/b
/a/b/c/d
会重定向到/bb/c/d
等
如果您不希望发生这种情况,请使用重定向匹配:
RedirectMatch ^/assortiment/$ http://example.com/alle-producten
但是,这不会帮助您查询字符串。 Redirect
或RedirectMatch
都不会与查询字符串匹配。您需要使用mod_rewrite和重写规则:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=979$
RewriteRule ^assortiment/artikelen_ingedeeld_per_branche/transporteurs_verhuisbedrijven3/Verhuisdekens____baal_a_25_stuks_.html$ http://example.com/221-transport-en-verhuisbedrijven [L,R=301]
RewriteRule ^assortiment/ http://example.com/alle-producten [L,R=301]