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

如何通过.htaccess让所有PHP脚本交由index.php处理并隐藏GET参数

用.htaccess隐藏PHP调用中的r GET参数

前提准备

首先得确保你的Apache服务器已经开启了mod_rewrite模块——打开Apache的配置文件(比如httpd.conf或apache2.conf),找到LoadModule rewrite_module modules/mod_rewrite.so这一行,确保它没有被注释掉,然后重启Apache生效。

基础实现(保留.php后缀)

如果想把index.php?r=something.php转换成/something.php这种URL,直接在网站根目录创建或编辑.htaccess文件,写入以下规则:

RewriteEngine On

# 跳过实际存在的文件和目录,防止静态资源(比如图片、CSS)被错误重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 将请求的PHP文件路径作为r参数转发到index.php
RewriteRule ^(.+\.php)$ index.php?r=$1 [L,QSA]
  • [L]:表示这是最后一条匹配规则,匹配到后不再执行后续规则
  • [QSA]:保留原URL中的其他GET参数,比如访问/something.php?foo=bar时,会自动转为index.php?r=something.php&foo=bar

进阶优化(去掉.php后缀)

如果想要更简洁的URL(比如/something对应index.php?r=something.php),可以把规则改成这样:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 将无后缀的请求路径拼接.php后作为r参数
RewriteRule ^([^/.]+)$ index.php?r=$1.php [L,QSA]

这样用户访问/something时,服务器会内部转发到index.php?r=something.php,URL里完全看不到r参数。

关键注意事项

  • 安全过滤:一定要在index.php里对$_GET['r']做合法性校验,比如限制只能访问指定目录下的PHP文件,防止恶意用户通过构造r参数进行路径遍历攻击(比如r=../../etc/passwd)
  • 缓存问题:测试新规则时建议用浏览器隐私模式,避免旧的URL缓存导致测试结果不准确
  • 权限问题:确保.htaccess文件对Apache服务器有可读权限,否则规则不会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:45:57