You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache2+Laravel通配符子域名路由问题:主域名无法渲染index.php

Apache通配符SSL配置下顶级域名无法渲染index.php的解决方案

这个方案在Apache环境下完全可行,不需要切换到Nginx,问题出在配置细节上,以下是具体排查和修复步骤:

1. 修正Apache目录权限配置

你的default-ssl.conf中Directory节点指向了/var/www/project,但DocumentRoot是/var/www/project/public,权限配置必须对应到Laravel的入口目录,否则.htaccess规则无法生效。修改后的配置片段:

ServerName project.app
ServerAlias *.project.app
DocumentRoot /var/www/project/public

<Directory /var/www/project/public>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted  # Apache 2.4+推荐使用该指令替代旧的Order/allow规则
</Directory>

2. 补全Laravel顶级域名路由

你只配置了子域名的路由规则,顶级域名需要对应路由才能渲染内容,添加以下代码到路由文件:

// 顶级域名首页路由
Route::domain('project.app')->group(function () {
    Route::view('/', 'pages.home'); // 替换为你的首页视图或控制器
});

// 或者使用默认路由(未指定domain的路由会匹配顶级域名请求)
// Route::view('/', 'pages.home');

3. 完善public目录下的.htaccess规则

当前.htaccess缺少Laravel核心的URL重写规则,导致请求无法转发到index.php,替换为完整规则:

RewriteEngine On

# 将HTTP请求强制跳转至HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 处理127.0.0.1跳转(保留原有规则)
RewriteCond %{HTTP_HOST} ^127\.0\.0\.1
RewriteRule (.*) https://project.app/$1 [R=301,L]

# Laravel核心重写:将所有非文件/目录请求指向index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

4. 确保Apache必要模块启用

执行以下命令启用重写和SSL模块,然后重启服务:

sudo a2enmod rewrite ssl
sudo systemctl restart apache2

5. 检查80端口站点配置(可选)

如果存在非SSL的000-default.conf配置,需确保顶级域名和子域名同样指向public目录并强制跳转HTTPS,避免配置冲突:

ServerName project.app
ServerAlias *.project.app
DocumentRoot /var/www/project/public

RewriteEngine On
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

完成以上步骤后,Apache即可正常处理顶级域名和通配符子域名的请求,无需切换到Nginx。

内容的提问来源于stack exchange,提问作者Leland Ayton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:54:31