如何通过.htaccess实现带端口的服务器站点301重定向?
问题解答
现有配置可用性判断
你编写的Redirect 301 "http://example.com:5557" "http://203.0.113.111:5557"配置不可用。原因是Apache的Redirect指令仅匹配请求的路径部分,不支持直接匹配域名、端口信息,将完整URL放在第一个参数的位置无法命中任何请求。
需求实现方案
该需求完全可以通过.htaccess文件实现,需先确认两个前置条件:
- Apache已启用
mod_rewrite模块 - example.com:5557对应站点的配置中已开启.htaccess权限(即
AllowOverride All配置项已开启)
将以下规则写入example.com:5557站点根目录下的.htaccess文件即可:
RewriteEngine On # 匹配请求域名是example.com且端口为5557的请求 RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteCond %{SERVER_PORT} ^5557$ # 301永久重定向到目标地址,保留原请求路径与参数 RewriteRule ^(.*)$ http://203.0.113.111:5557/$1 [L,R=301]
规则说明
[NC]参数表示匹配域名时不区分大小写[L,R=301]表示该条规则为当前生效的最后一条规则,同时返回301永久重定向状态码- 规则末尾的
$1会自动携带原请求的路径、参数,例如访问http://example.com:5557/doc?id=2会自动跳转到http://203.0.113.111:5557/doc?id=2;如果不需要保留原路径,所有请求统一跳转到目标根目录,去掉$1即可
注意事项
测试阶段建议先将R=301改为R=302使用临时重定向,避免浏览器缓存301规则导致后续调整不生效,确认规则符合预期后再改回301。
内容的提问来源于stack exchange,提问作者Sharlene Delaney
相关产品推荐
相关产品推荐

