Mat*_*att 0 apache .htaccess mod-rewrite redirect
我想重定向(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
Run Code Online (Sandbox Code Playgroud)
还有这条线:
Redirect 301 /assortiment/ http://example.com/alle-producten
Run Code Online (Sandbox Code Playgroud)
当我访问时,/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.
第一个重定向什么也没做.你不能把查询字符串放在一个Redirect.第二个是按预期工作.方式Redirect有效,有点像"开始"的方法.所以如果指令是:
Redirect /a /b
Run Code Online (Sandbox Code Playgroud)
然后:
/a 将重定向到 /b/a/ 将重定向到 /b//abcd123 将重定向到 /bbcd123/a/b/c/d 将重定向到 /b/b/c/d此外,如果您的规则是:
Redirect /a/ /b
Run Code Online (Sandbox Code Playgroud)
然后:
/a/ 将重定向到 /b/a/b/c/d 将重定向到 /bb/c/d等等
如果您不希望发生这种情况,请使用重定向匹配:
RedirectMatch ^/assortiment/$ http://example.com/alle-producten
Run Code Online (Sandbox Code Playgroud)
但是,这对查询字符串没有帮助.不会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]
Run Code Online (Sandbox Code Playgroud)