同一域名部署两个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
相关产品推荐
相关产品推荐

