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

.htaccess配置Clean URL 保持地址不变转发到public/index.php

.htaccess 重写规则修改方案

你现有的根目录重写逻辑已经满足基础转发要求,无需调整,只需要补全public目录下缺失的重写规则即可实现需求。


保留根目录原有.htaccess配置

根目录规则不需要改动,原有逻辑已经实现了「请求静默转发到public目录、不改变地址栏」的基础能力,内容保持如下即可:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [L]
</IfModule>

注意:不要给这两条规则加R=301/R=302跳转标记,否则会触发浏览器外部跳转,导致地址栏变更。


修改public目录下的.htaccess配置

你当前public目录下的配置只定义了重写判定条件,缺少实际执行转发的规则,替换为以下内容:

<IfModule mod_rewrite.c>
    Options -Multiviews
    RewriteEngine On
    # 按实际部署路径调整:部署在域名根目录填/,部署在/auth子目录填/auth/public
    RewriteBase /
    # 跳过真实存在的目录、文件请求,不做重写
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    # 核心规则:所有符合条件的请求内部转发到index.php,路径作为q参数传入
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

规则说明

  • 核心转发规则RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]全程使用内部重写,没有加跳转标记,浏览器地址栏会始终显示用户输入的原始URL,不会发生变化
  • [L]标记表示匹配到当前规则后停止处理后续重写规则,避免规则循环
  • [QSA]标记会自动保留原请求携带的查询参数,例如访问/anything?page=2时,最终服务端收到的请求是index.php?q=anything&page=2,不会丢失原有参数
  • 原有的两个RewriteCond规则会自动过滤真实存在的静态资源(比如css、js、图片文件)请求,这类请求会直接返回对应文件,不会被转发到index.php

配置完成后直接测试即可:访问https://www.something.com/anything时地址栏保持不变,在public/index.php中读取$_GET['q']就能拿到anything的路径值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:54:38