如何通过.htaccess将dl子域名跳转至主域名(支持动态路径)
没问题,我来帮你搞定这个子域名跳转的需求!根据你的情况,我们需要把所有来自dl.cafecaset.com下/pictures/路径的请求,完整保留动态路径(包括dir1、dir2、dir3和图片文件名),跳转到主域名cafecaset.com的对应地址。下面分几种常见服务器环境给出具体方案:
Apache 服务器(.htaccess 配置)
如果你的服务器用的是Apache,并且开启了mod_rewrite模块,可以在dl子域名的根目录创建或编辑.htaccess文件,添加以下规则:
RewriteEngine On # 匹配dl子域名,不区分大小写 RewriteCond %{HTTP_HOST} ^dl\.cafecaset\.com$ [NC] # 捕获/pictures/开头的所有路径,永久重定向到主域名对应地址 RewriteRule ^(pictures/.*)$ http://cafecaset.com/$1 [L,R=301]
R=301表示永久重定向,对搜索引擎SEO友好,会让搜索引擎更新索引地址;如果只是临时跳转可以改成R=302。[NC]表示匹配域名时不区分大小写,避免大小写差异导致的问题。$1会自动捕获pictures/后面的所有动态内容(比如dir1/dir2/dir3/3.jpg),完美保留原路径。
Nginx 服务器配置
如果是Nginx服务器,找到dl子域名对应的server配置块,添加以下内容:
server { listen 80; server_name dl.cafecaset.com; # 匹配所有以/pictures/开头的请求 location ^~ /pictures/ { # 永久重定向到主域名,$request_uri保留完整的请求路径 return 301 http://cafecaset.com$request_uri; } }
这个配置非常简洁,$request_uri会直接获取用户请求的完整路径(包括动态的目录和文件名),不需要额外的正则捕获,省心又高效。配置完记得重启Nginx生效。
备选:PHP脚本跳转(适合无服务器配置权限的情况)
如果你没有服务器的配置权限,可以在dl子域名的根目录创建一个index.php,或者针对pictures目录单独设置(比如在pictures目录下放该脚本),添加以下代码:
<?php // 检查当前请求来自dl子域名,且路径以/pictures/开头 if ($_SERVER['HTTP_HOST'] === 'dl.cafecaset.com' && str_starts_with($_SERVER['REQUEST_URI'], '/pictures/')) { // 拼接主域名的新地址 $newUrl = 'http://cafecaset.com' . $_SERVER['REQUEST_URI']; // 发送永久重定向头 header("HTTP/1.1 301 Moved Permanently"); header("Location: $newUrl"); exit(); } ?>
注意:
str_starts_with是PHP 8.0及以上版本支持的函数,如果你的PHP版本较低,可以用substr($_SERVER['REQUEST_URI'], 0, 10) === '/pictures/'来替代判断。
最后测试
配置完成后,直接访问http://dl.cafecaset.com/pictures/dir1/dir2/dir3/3.jpg,检查是否自动跳转到http://cafecaset.com/pictures/dir1/dir2/dir3/3.jpg即可。
内容的提问来源于stack exchange,提问作者hamidreza biglari

