同一服务器多域名重定向到对应URI用mod rewrite还是301重定向?
同服务器多域名对应URI重定向最优方案
核心概念澄清
mod_rewrite是Apache提供的URL重写工具,301是重定向的HTTP状态码,二者不是二选一的互斥关系,是工具+返回状态的搭配组合。
优先方案:mod_rewrite实现301重定向
适用条件
只需确认Apache已开启mod_rewrite模块,且允许根目录使用.htaccess配置(无httpd.conf修改权限也可使用,绝大多数商用主机默认开启该权限)
配置代码
在网站根目录新建.htaccess文件,写入如下规则:
RewriteEngine On # 仅匹配根路径请求,避免干扰现有正常业务URI RewriteCond %{REQUEST_URI} ^/$ # 提取域名标识,自动适配带/不带www的访问场景,不区分大小写 RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.com$ [NC] # 跳转至对应URI,返回301永久重定向状态码 RewriteRule ^(.*)$ /index.php/%2/index [L,R=301]
优势
- 性能远高于PHP层处理,无需启动PHP进程即可返回跳转结果
- 不侵入现有业务代码,规则独立维护
- 自动适配多域名,新增同规则域名无需修改配置
备选方案:PHP层实现301重定向
如果没有.htaccess写入权限,可直接在入口index.php最开头插入如下代码:
<?php // 仅处理根路径访问请求 if ($_SERVER['REQUEST_URI'] === '/') { // 提取域名标识,过滤www前缀和.com后缀 $domain_tag = preg_replace('/^(www\.)?([^.]+)\.com$/', '$2', strtolower($_SERVER['HTTP_HOST'])); // 返回301永久重定向 header('HTTP/1.1 301 Moved Permanently'); header("Location: /index.php/{$domain_tag}/index"); exit(); } // 原有业务代码保持不变 ?>
内容的提问来源于stack exchange,提问作者Bearwoolf
相关产品推荐
相关产品推荐

