如何实现域名访问时自动重定向至落地页?
解决根域名访问空白问题
问题根源
当直接访问根域名(如https://example.com)时,服务器会识别这是对网站根目录的请求,满足.htaccess中RewriteCond %{REQUEST_FILENAME} !-d的反向条件(即请求是目录),因此不会触发转发到router.php的规则。而你的根目录下没有服务器默认的索引文件(如index.php),所以页面加载空白。
当访问https://example.com/index时,该请求既不是文件也不是目录,触发转发规则,router.php中的split_url()函数默认拿到index,加载index.php正常显示。
解决方案
方案1:修改.htaccess,单独处理根域名请求
在现有规则前添加一条针对根路径的重写规则,强制将根域名请求转发到router.php并传入url=index:
RewriteEngine On # 处理根域名请求 RewriteRule ^$ router.php?url=index [L,QSA] # 原有规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ router.php?url=$1 [L,QSA]
方案2:调整服务器默认文档(推荐)
将router.php设置为服务器的默认索引文件,这样访问根域名时,服务器会直接加载router.php,此时split_url()函数会因为$_GET['url']不存在而使用默认值index,自动加载index.php。
- Apache环境,在
.htaccess中添加:DirectoryIndex router.php index.php - Nginx环境,在站点配置的
location /块中修改:index router.php index.php;
方案3:优化router.php触发逻辑(可选)
你的现有代码已经处理了$_GET['url']不存在的情况(默认返回index),但需要确保服务器能在根域名访问时加载router.php,配合方案2使用效果最佳。
验证
修改后重启服务器(或让.htaccess规则生效),直接访问根域名,应该会自动加载index.php的内容,和访问/index效果一致。
内容的提问来源于stack exchange,提问作者Junior
相关产品推荐
相关产品推荐

