mod_rewrite更换域名时旧域名被追加到新URL错误问题求助
问题原因
你所有跨域名重写的规则都存在同一个核心错误:RewriteRule 的匹配对象仅包含域名之后的路径部分,不会匹配到HTTP_HOST(即域名)内容。
比如请求 http://printingupload.com/files-submited/xxx 时,RewriteRule 拿到的待匹配内容只有 files-submited/xxx,你写的 ^printingupload\.com/files-submited\/(.*)$ 规则永远无法命中请求,逻辑异常后就会把完整旧域名当成路径拼接到新URL后。
修正方案
删掉所有 RewriteRule 里多余的域名前缀,仅保留路径部分的匹配规则即可,同时建议为跨域名的重定向规则加上 R=301(永久重定向)或 R=302(临时重定向)标识,避免内部重写逻辑异常。
修正后的完整.htaccess配置
# php -- BEGIN cPanel-generated handler, do not edit # Set the “ea-php74” package as the default “PHP” programming language. <IfModule mime_module> AddHandler application/x-httpd-ea-php74 .php .php7 .phtml </IfModule> # php -- END cPanel-generated handler, do not edit RewriteEngine On #### PrintNinja unique redirects RewriteCond %{HTTP_HOST} ^printninja.com$ [NC] RewriteRule ^learn/(.*) /printing-resource-center/ [NC,L,R=301] RewriteRule ^digital-downloads/(.*) /printing-resource-center/ [NC,L,R=301] RewriteRule ^resources/(.*) /printing-resource-center/ [NC,L,R=301] RewriteRule ^pricing\/(.*)$ https://printninja.com/calculator/$1 [L,R=301] #### Begin Uploader rewrites # printingupload.com/files-submited/* --redirect to -> https://printninja.com/calculator/files-submited/* RewriteCond %{HTTP_HOST} ^(www\.)?printingupload\.com$ [NC] RewriteRule ^files-submited\/(.*)$ https://printninja.com/calculator/files-submited/$1 [L,R=301] # printingupload.com/invalid-order/* --redirect to -> https://printninja.com/calculator/invalid-order/* RewriteCond %{HTTP_HOST} ^(www\.)?printingupload\.com$ [NC] RewriteRule ^invalid-order\/(.*)$ https://printninja.com/calculator/invalid-order/$1 [L,R=301] # printingupload.com/* --redirect to -> https://printninja.com/calculator/products/upload_proofing/* (this rule must appear after the other printingupload.com/* rules) RewriteCond %{HTTP_HOST} ^(www\.)?printingupload\.com$ [NC] RewriteRule ^(.*)$ https://printninja.com/calculator/products/upload_proofing/$1 [L,R=301] # submit.printingupload.com/* --redirect to -> https://printninja.com/calculator/submit_proofing/* RewriteCond %{HTTP_HOST} ^submit\.printingupload\.com$ [NC] RewriteRule ^(.*)$ http://printninja.com/calculator/submit_proofing/$1 [L,R=301] # proofs.printingupload.com/approved/* --redirect to -> https://printninja.com/calculator/status/approved/* RewriteCond %{HTTP_HOST} ^proofs\.printingupload\.com$ [NC] RewriteRule ^approved\/(.*)$ https://printninja.com/calculator/status/approved/$1 [L,R=301] # proofs.printingupload.com/rejected/* --redirect to -> http://staging.printninja.com/calculator/status/rejected/* RewriteCond %{HTTP_HOST} ^proofs\.printingupload\.com$ [NC] RewriteRule ^rejected\/(.*)$ https://printninja.com/calculator/status/rejected/$1 [L,R=301] # proofs.printingupload.com/* --redirect to -> http://staging.printninja.com/calculator/rackfile/* RewriteCond %{HTTP_HOST} ^proofs\.printingupload\.com$ [NC] RewriteRule ^(.*)$ https://printninja.com/calculator/rackfile/$1 [L,R=301]
你最初测试的abc.def.com规则修正版
RewriteCond %{HTTP_HOST} ^abc\.def\.com$ [NC] RewriteRule ^(.*)$ https://efg.com/dd/as/$1 [L,R=301]
修改后请求 http://abc.def.com/123123132/abcvalue 会正常跳转到 https://efg.com/dd/as/123123132/abcvalue,不会再拼接旧域名。
内容的提问来源于stack exchange,提问作者nOmi
相关产品推荐
相关产品推荐

