请求协助:通过.htaccess移除URL中两位国家码并按规则重插
搞定.htaccess国家码URL重写的解决方案
别慌!我天天跟.htaccess规则打交道,这问题咱们一步步拆解解决。先结合你描述的结构变化(从domain.com/xy到subdomain.domain.com/xy/something/),针对两种最常见的需求给你配置:
场景1:旧域名跳转新域名,同时保留/插入国家码
如果用户访问旧地址domain.com/xy/xxx,你想自动跳转到新地址subdomain.domain.com/xy/something/xxx;而且如果用户直接访问新域名不带国家码的路径(比如subdomain.domain.com/something/xxx),能自动插入对应国家码(比如默认用us),就这么配:
旧域名的.htaccess(如果还能控制的话):
RewriteEngine On # 匹配旧域名下以两位国家码开头的路径 RewriteCond %{HTTP_HOST} ^domain\.com$ [NC] RewriteRule ^([a-z]{2})/(.*)$ https://subdomain.domain.com/$1/something/$2 [R=301,L]
新域名的.htaccess:
RewriteEngine On # 先排除真实存在的文件/目录,避免图片、CSS这些静态资源被错误重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配不带国家码的路径,重定向到带默认国家码的目标路径 RewriteRule ^(.*)$ https://subdomain.domain.com/us/something/$1 [R=301,L]
场景2:URL里隐藏国家码,后台实际用带国家码的路径
如果想让用户看到的URL是subdomain.domain.com/something/xxx,但服务器实际处理的是subdomain.domain.com/xy/something/xxx(也就是把国家码藏起来),用这个规则:
RewriteEngine On # 同样先排除真实文件/目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 这里我硬编码了国家码`xy`,如果要动态获取(比如从Cookie或用户IP),可以加RewriteCond匹配对应的变量 # 比如要从Cookie取:RewriteCond %{HTTP_COOKIE} country=([a-z]{2}) [NC],然后用$1代替xy RewriteRule ^something/(.*)$ /xy/something/$1 [L]
几个关键提醒:
- 先确认服务器开启了
mod_rewrite模块,不然这些规则完全不会生效! - 测试阶段先用
R=302临时重定向,等确认跳转逻辑完全正确后,再改成R=301永久重定向——避免浏览器缓存错误规则,后续不好修改。 - 如果需要根据用户地理位置动态插入国家码,可以结合服务器地理IP模块或用户Cookie调整规则,比如通过
RewriteCond %{HTTP_COOKIE} country=([a-z]{2})匹配Cookie里的国家码,再用$1替换规则里的固定国家码。
内容的提问来源于stack exchange,提问作者Ganga
相关产品推荐
相关产品推荐

