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

同一域名部署两个Laravel项目的Apache配置咨询

嘿,这个需求其实挺常见的,刚好我之前帮朋友搞定过类似的配置,用Apache的mod_rewrite结合User-Agent检测就能完美实现,给你一步步拆解:

解决方案:基于User-Agent的Apache路由配置

首先,先确认你的Apache已经启用了**mod_rewrite和mod_setenvif**模块——这俩是实现需求的核心。如果没启用,执行以下命令(以Ubuntu/Debian系统为例):

sudo a2enmod rewrite setenvif
sudo systemctl restart apache2

1. 配置域名虚拟主机

找到你的域名虚拟主机配置文件(通常在/etc/apache2/sites-available/xyz.com.conf),替换或添加以下内容:

<VirtualHost *:80>
    ServerName xyz.com
    ServerAlias www.xyz.com

    # 定义移动设备的User-Agent匹配规则,可按需扩展设备标识
    SetEnvIfNoCase User-Agent "android|iphone|ipod|ipad|blackberry|windows phone|mobile" IS_MOBILE

    # 默认指向桌面版Laravel项目的public目录(Laravel项目必须通过public目录访问)
    DocumentRoot /var/www/desktop-laravel/public
    <Directory /var/www/desktop-laravel/public>
        AllowOverride All
        Require all granted
        RewriteEngine On

        # 核心规则:如果是移动设备请求,重定向到自适应项目的public目录
        RewriteCond %{ENV:IS_MOBILE} ^1$
        RewriteRule ^(.*)$ /var/www/adaptive-laravel/public/$1 [L]
    </Directory>

    # 配置自适应项目的目录权限,确保Apache能正常访问
    <Directory /var/www/adaptive-laravel/public>
        AllowOverride All
        Require all granted
        RewriteEngine On
    </Directory>

    # 日志配置,按需调整路径
    ErrorLog ${APACHE_LOG_DIR}/xyz.com-error.log
    CustomLog ${APACHE_LOG_DIR}/xyz.com-access.log combined
</VirtualHost>

2. 调整Laravel项目的.htaccess文件

两个项目的public/.htaccess需要配合调整,确保路由正常工作:

桌面版项目(/var/www/desktop-laravel/public/.htaccess)

在默认的Laravel路由规则前,添加移动设备重写规则:

# 优先检测移动设备,跳转至自适应项目
RewriteCond %{ENV:IS_MOBILE} ^1$
RewriteRule ^(.*)$ /var/www/adaptive-laravel/public/$1 [L]

# 以下是Laravel默认的.htaccess规则,保持不变即可
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

自适应版项目(/var/www/adaptive-laravel/public/.htaccess)

保持Laravel默认的.htaccess规则即可,无需额外修改。

3. 关键细节检查

  • 目录权限:确保Apache用户(通常是www-data)拥有两个项目目录的读取权限:
    sudo chown -R www-data:www-data /var/www/desktop-laravel /var/www/adaptive-laravel
    sudo chmod -R 755 /var/www/desktop-laravel/storage /var/www/adaptive-laravel/storage
    
  • User-Agent扩展:如果某些移动设备没被匹配到,可以在SetEnvIfNoCase规则里添加对应的设备标识;
  • HTTPS适配:如果需要启用HTTPS,在VirtualHost *:443块中复制相同的规则,并配置好SSL证书;
  • 测试验证:用浏览器开发者工具切换不同的User-Agent,测试跳转是否正常。

如果遇到路由冲突或访问报错,可以查看Apache的错误日志(/var/log/apache2/xyz.com-error.log)排查具体问题。

内容的提问来源于stack exchange,提问作者Ahmet Zencirli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:39:19