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

基于URL动态配置RewriteBase 实现同域名访问两个PHP应用

同一域名下无路径暴露映射两个PHP应用需求

背景与需求

  • 服务器环境:Linux,public_html根目录下有app和landing(CMS)两个应用文件夹
  • 映射规则:
    • 访问dev.domin.sk(根路径)时,加载landing应用,URL保持dev.domin.sk
    • 访问dev.domin.sk/*(任意子路径)时,加载app应用,URL保持dev.domin.sk/xxx,不显示/app前缀
  • 此前配置可实现功能,但URL会强制跳转到/landing/或/app/xxx,不符合需求

此前的功能可用但URL暴露的配置

<IfModule mod_rewrite.c>
RewriteEngine On

# Set the base depending on the condition
RewriteCond %{HTTP_HOST} ^dev\.domin\.sk$ [NC]
RewriteRule ^$ /landing/ [L]
RewriteCond %{HTTP_HOST} ^dev\.domin\.sk$ [NC]
RewriteRule !^landing/ /app%{REQUEST_URI} [L]

# Handle trailing slash for the dating app
RewriteCond %{REQUEST_URI} ^/app/([a-zA-Z0-9_-]+)/?$
RewriteRule ^ /app/%1 [R=301,L]
</IfModule>

尝试过的无效配置

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Set the base depending on the condition
    RewriteCond %{HTTP_HOST} ^dev\.domin\.sk$ [NC]
    RewriteRule ^$ - [E=BASE:/landing]
    
    RewriteCond %{HTTP_HOST} ^dev\.domin\.sk$ [NC]
    RewriteRule ^$/* - [E=BASE:/app]

    RewriteBase %{ENV:BASE}/$1 [L]

</IfModule>

正确的.htaccess配置方案

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 仅对目标域名生效,避免影响其他站点
    RewriteCond %{HTTP_HOST} ^dev\.domin\.sk$ [NC]

    # 根路径请求:内部转发到landing的入口文件,URL保持不变
    RewriteRule ^$ landing/index.php [L]

    # 非根路径请求:优先放行真实存在的文件/目录(比如图片、CSS)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # 内部转发到app的入口文件,完整路径会传给app处理(适合带路由的PHP应用)
    RewriteRule ^(.*)$ app/index.php [L]

    # 若app是多页面结构,需要直接映射到对应文件,替换上面的RewriteRule为:
    # RewriteRule ^(.*)$ app/$1 [L]
</IfModule>

关键说明

  • 采用内部转发逻辑,不会修改浏览器地址栏的URL,彻底避免暴露文件夹路径
  • !-f和!-d条件确保服务器上真实存在的静态资源(如图片、JS、CSS)可以直接访问,不会被转发到应用入口
  • 如果你的landing应用也需要处理子路径(比如CMS的后台路由),可以在landing文件夹内单独添加对应的.htaccess配置,根目录的规则只会处理根路径请求

内容的提问来源于stack exchange,提问作者Khalil DaNish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:07:18