
在现代Web开发中,尤其是在使用MVC(Model-View-Controller)或类似架构的PHP框架时,通常会将所有前端请求统一路由到一个入口文件(例如index.php),而这个入口文件通常位于项目根目录下的一个子目录(如public/)中。这样做有助于分离公共可访问资源与核心应用逻辑,提升安全性和项目结构清晰度。然而,Apache服务器的默认配置可能无法直接满足这种需求。本文将指导您如何通过mod_rewrite模块在.htaccess文件中实现这一目标。
我们的目标是实现以下行为:
mod_rewrite是Apache的一个强大模块,它允许通过正则表达式重写URL。.htaccess文件是放置在Web服务器目录中的配置文件,它为该目录及其子目录提供配置指令。要使用mod_rewrite,请确保您的Apache服务器已启用此模块,并且在httpd.conf或虚拟主机配置中,相关目录的AllowOverride指令设置为All或至少包含FileInfo。
为了满足上述需求,我们将在项目的根目录(即包含public/目录的上一级目录)创建一个.htaccess文件。以下是推荐的.htaccess配置内容:
# 启用RewriteEngine
RewriteEngine On
# 设置RewriteBase,指定重写规则的基准URL路径
# 如果您的网站部署在子目录中(例如 http://localhost/myproject/),则应设置为 /myproject/
RewriteBase /
# 规则1: 检查请求是否指向一个真实存在的文件或目录
# 如果请求的URI对应一个实际存在的文件(-f)或目录(-d),
# 则不执行后续的重写规则,直接由Apache提供服务。
# 这确保了静态资源(如CSS、JS、图片)能够被直接访问。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 规则2: 将所有不匹配真实文件或目录的请求重写到 public/index.php
# ^(.*)$ 匹配所有URI路径,并将其作为捕获组传递。
# public/index.php 是我们的前端控制器。
# [L] 表示这是最后一条规则,停止处理后续规则。
# 此时,原始的请求URI(例如 /news/1?test=helloword)将通过 $_SERVER['REQUEST_URI']
# 完整地传递给 public/index.php。
RewriteRule ^(.*)$ public/index.php [L]配置说明:
会译·对照式翻译
会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译
79
查看详情
通过这组规则,当用户访问http://localhost/css/style.css时,由于public/css/style.css是一个真实存在的文件(假设它存在),RewriteCond条件不满足,请求将直接由Apache处理。而当用户访问http://localhost/news/1?test=helloword时,由于/news/1不是一个真实的文件或目录,RewriteCond条件满足,请求将被重写到public/index.php。
当请求被重写到public/index.php后,PHP应用可以通过$_SERVER超全局变量访问原始的URL信息。
在public/index.php中,您可以这样获取和解析URL:
<?php
// 获取原始的请求URI,包含路径和查询字符串
$requestUri = $_SERVER['REQUEST_URI'];
// 解析URL
$urlComponents = parse_url($requestUri);
// 获取路径部分
$path = $urlComponents['path'] ?? '/';
// 获取查询字符串部分
$queryString = $urlComponents['query'] ?? '';
// 如果需要,可以将查询字符串解析成关联数组
$queryParameters = [];
if (!empty($queryString)) {
parse_str($queryString, $queryParameters);
}
echo "原始请求URI: " . $requestUri . "\n";
echo "解析后的路径: " . $path . "\n";
echo "解析后的查询字符串: " . $queryString . "\n";
echo "解析后的查询参数:\n";
print_r($queryParameters);
// 示例输出:
// 访问 http://localhost/news/1?test=helloword
// 原始请求URI: /news/1?test=helloword
// 解析后的路径: /news/1
// 解析后的查询字符串: test=helloword
// 解析后的查询参数:
// Array
// (
// [test] => helloword
// )
// 在这里,您可以根据 $path 和 $queryParameters 实现您的路由逻辑
// 例如:
// require __DIR__ . '/../bootstrap/app.php'; // 引入应用启动文件
// $app->handleRequest($path, $queryParameters); // 路由处理<Directory /var/www/html/your_project_root>
Options Indexes FollowSymLinks
AllowOverride All # 确保这一行存在
Require all granted
</Directory>通过上述.htaccess配置,您可以成功地将Apache服务器的Web根目录逻辑地指向项目的public/子目录,同时保留了静态资源的直接访问能力,并确保了所有动态请求都能被前端控制器(如public/index.php)接收并处理,且原始URL的路径和查询参数在PHP应用中保持完整可访问。这种设置是许多现代PHP框架(如Lar*el、Symfony)推荐和使用的标准方式,为构建健壮、可维护的Web应用奠定了基础。
以上就是使用.htaccess配置Apache:将子目录设为根目录并实现URL路径透明化的详细内容,更多请关注php中文网其它相关文章!
# php
# word
# laravel
# html
# js
# css
# 这是
# 抖音seo工具哪种好
# 虚拟主机
# 营销模式做推广好吗
# 佛山家电网站seo优化
# 通化企业seo系统
# 营销推广征集玩法有哪些
# 丽江推广营销途径
# 什么是营销推广图片
# 潍城区网络推广seo
# 别墅营销推广色系
# 吴忠营销网络推广哪个好
# 您可以
# 设为
# 配置文件
# 设置为
# 写到
# 重写
# 您的
# php框架
# apache
# 正则表达式
# bootstrap
# 前端
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
如何高效地基于键列值映射DataFrame中的多个列
苹果手机怎么合并照片_苹果手机合并多张照片的操作方法
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
苹果SE如何开启单手模式_苹果SE单手操作功能
《伊瑟》凶影追缉库卢鲁boss攻略
微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】
Highcharts雷达图轴线交点数值标注指南
todesk如何添加信任设备_todesk信任设备设置教程
电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】
J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践
如何查询个人病历记录
毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明
悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口
优化CSS动画与J*aScript定时器协同:构建稳定Toast提示
12306售票时间最新规定 | 网上订票和车站窗口时间一样吗
食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗
AngularJS动态内容中DOM元素查找的时序问题及$timeout解决方案
Vue 3中独立响应式实例的创建与应用
小米倒班助手添加日历提醒
Composer reinstall命令重装损坏的包
韩小圈网页版PC端入口 韩小圈网页版官方网站入口
J*a实现任务清单管理_集合框架综合入门练手
喜茶GO更换登录账号方法
红手指专业版app注册教程
汽水音乐官网网页版入口 汽水音乐官网网页版在线入口
漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接
研招网官方网站正版登录网址_中国研究生招生信息网官网首页
快手缓存清理方法
繁花漫画使用教程
微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程
Python中深度嵌套字典与列表的数据提取与条件过滤指南
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法
在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享
优化2xN网格最大路径和的动态规划算法实践
C++ optional用法详解_C++17处理可能为空的返回值
《爱笔思画x》涂色教程
口腔诊所管理软件推荐
智慧职教mooc平台登录网址 智慧职教mooc官网直达
鸿蒙单条备忘录如何加密
我的世界官方网址入口 我的世界游戏主页直达入口
Linux如何自动分析系统异常日志_Linux日志智能检测
研招网官方网站招生平台入口_中国研究生招生信息网官网登录
GBA模拟器手柄按键设置
win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】
动漫岛在线动漫网 动漫岛动漫在线观看官方入口
钉钉任务无法提醒如何处理 钉钉任务提醒优化方法
diskgenius分区工具如何设置Bios启动项
六级准考证号怎么查_四六级准考证查询入口官网
2025-11-21
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。