PHP中如何通过GET传值并实现无GET变量的干净URL
实现干净URL传递用户参数的方案
当然可以实现这种干净URL,核心是通过服务器的URL重写规则,把www.example.net/xyz这类路径映射到原来的index.php?user=xyz,同时PHP端依然能正常获取到用户参数。
Apache服务器配置
- 确保Apache启用了
mod_rewrite模块(大部分主机默认已开启)。 - 在网站根目录创建或编辑
.htaccess文件,添加以下规则:
RewriteEngine On # 排除真实存在的文件和目录,避免静态资源被重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将URL路径部分作为user参数传递给index.php RewriteRule ^(.*)$ index.php?user=$1 [L]
Nginx服务器配置
在Nginx的站点配置文件中,添加重写规则:
location / { # 优先访问真实存在的文件/目录 try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/(.*)$ /index.php?user=$1 last; }
PHP端参数获取
配置完成后,你可以两种方式获取用户参数:
- 直接沿用原来的
$_GET['user'],因为重写规则已经把路径值传递给了这个变量:
$username = $_GET['user'] ?? '';
- 也可以直接解析请求路径(适合不想依赖重写规则传递参数的场景):
// 去除路径开头的斜杠,得到用户名部分 $username = trim($_SERVER['REQUEST_URI'], '/');
注意事项
- 安全校验:获取到用户名后,必须做严格的过滤和校验,比如使用数据库预处理语句查询,防止SQL注入。
- 路由冲突:如果网站有其他静态页面(如
/about)或API接口,要确保重写规则不会误匹配这些路径,上述配置已经通过排除真实文件/目录避免了这个问题。
内容的提问来源于stack exchange,提问作者Lohith Diffie
相关产品推荐
相关产品推荐

