如何用.htaccess实现/edit/xxx路径自动指向index.php?
PHP伪静态配置实现动态路径指向index.php
前提条件
- 确认Apache服务器已启用
mod_rewrite模块 - 站点根目录的Apache配置(httpd.conf或虚拟主机配置)中,对应目录需设置
AllowOverride All,允许.htaccess文件生效
.htaccess配置代码
在站点根目录创建或修改.htaccess文件,添加以下规则:
RewriteEngine On # 排除真实存在的文件和目录,避免静态资源(如图片、CSS、JS)被错误重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将所有非真实文件/目录的请求转发到index.php RewriteRule ^(.*)$ index.php [L]
规则说明
RewriteEngine On:开启URL重写引擎RewriteCond %{REQUEST_FILENAME} !-f:仅当请求的不是真实存在的文件时,执行后续规则RewriteCond %{REQUEST_FILENAME} !-d:仅当请求的不是真实存在的目录时,执行后续规则RewriteRule ^(.*)$ index.php [L]:将符合条件的请求全部转发到index.php,[L]表示这是最后一条规则,停止后续匹配
在index.php中获取动态参数
请求转发后,你可以通过$_SERVER['REQUEST_URI']获取完整请求路径,比如访问xxyz.com/edit/2343时,该变量值为/edit/2343,再自行解析路径提取参数:
$requestUri = $_SERVER['REQUEST_URI']; // 去除开头的斜杠 $path = ltrim($requestUri, '/'); // 分割路径片段 $pathSegments = explode('/', $path); // 示例:提取edit后的ID参数 if ($pathSegments[0] === 'edit' && isset($pathSegments[1])) { $editId = $pathSegments[1]; // 这里编写对应ID的业务逻辑 }
针对性优化(可选)
如果仅需匹配/edit/数字这类格式的URL,可将RewriteRule替换为:
RewriteRule ^edit/(\d+)$ index.php?edit_id=$1 [L,QSA]
此时在index.php中可直接通过$_GET['edit_id']获取ID,QSA参数会保留原URL中的其他查询参数(若存在)。
内容的提问来源于stack exchange,提问作者ritika
相关产品推荐
相关产品推荐

