如何通过htaccess实现移除.php后缀并将?参数替换为/路径格式
实现方案
前置要求
- 确保Apache已开启
mod_rewrite扩展 - 站点配置中对应项目目录的
AllowOverride设置为All,允许.htaccess文件生效
操作步骤
在你的testingproject项目根目录下新建.htaccess文件,写入以下配置:
RewriteEngine On RewriteBase /testingproject/ # 1. 将带.php后缀的请求301重定向到无后缀地址,避免重复收录 RewriteCond %{THE_REQUEST} \s/([^?]+)\.php(\?[^?\s]*)?\s [NC] RewriteRule ^ %1 [L,R=301,NE] # 2. 排除真实存在的文件/目录,避免影响静态资源访问 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # 3. 处理带参数的路径:形如 /xxx/yyy 且 xxx.php 存在的请求,转成 xxx.php?mode=yyy RewriteCond %{DOCUMENT_ROOT}/testingproject/$1.php -f RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?mode=$2 [L,QSA] # 4. 处理无参数的路径:形如 /xxx 且 xxx.php 存在的请求,直接访问 xxx.php RewriteCond %{DOCUMENT_ROOT}/testingproject/$1.php -f RewriteRule ^([^/]+)/?$ $1.php [L]
适配说明
- 配置中的
QSA标志支持保留原有查询参数,例如访问user/abc?uid=123时,除了$_GET['mode']可获取到abc外,$_GET['uid']也能正常获取到123 - 所有规则会优先跳过真实存在的静态文件(图片、CSS、JS等),不会影响静态资源的正常访问
- 完全匹配需求场景:
- 访问
testing/getdata→ 自动映射到testing.php?mode=getdata,可直接通过$_GET['mode']获取参数值 - 访问
user→ 直接映射到user.php,无额外参数 - 访问
dashboard→ 直接映射到dashboard.php,无额外参数
- 访问
内容的提问来源于stack exchange,提问作者user8355629
相关产品推荐
相关产品推荐

