如何使用.htaccess隐藏页面扩展名与$_GET参数并重写URL?
用.htaccess实现URL美化:隐藏扩展名与GET参数
嘿,这事儿不难,用Apache的mod_rewrite就能轻松实现你要的URL美化效果。我给你整理好具体步骤和规则,直接用就行:
前提准备
首先得确保你的Apache服务器满足两个条件:
- 已经启用了
mod_rewrite模块(大多数主机默认开启,但如果是本地环境,可能需要手动在httpd.conf里开启) - 网站根目录(也就是
dice_mpc文件夹)的配置允许.htaccess生效,也就是在httpd.conf里对应目录的AllowOverride设置为All
具体.htaccess规则
在dice_mpc文件夹下新建(或修改).htaccess文件,粘贴以下内容:
# 开启重写引擎 RewriteEngine On # 设置重写基础路径,对应你的项目目录 RewriteBase /dice_mpc/ # 规则1:把美观的URL重写回实际的PHP文件和参数 # 匹配类似 /members/xxxxxx 的请求,重写到 members.php?as=xxxxxx RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+)$ $1.php?as=$2 [L,QSA] # 规则2(可选但推荐):把旧的URL(带.php和?as参数)301重定向到新的美观URL # 这样用户的旧书签、搜索引擎索引的旧链接都会跳转到新URL,对SEO友好 RewriteCond %{THE_REQUEST} ^GET\ /[^?]+\.php\?as=([^&\ ]+) RewriteRule ^([^/]+)\.php$ /dice_mpc/$1/%1? [R=301,L]
规则解释
RewriteEngine On:开启URL重写功能RewriteBase /dice_mpc/:指定重写的基础路径,确保规则在你的项目目录下生效- 第一条规则的两个
RewriteCond是判断请求的不是真实存在的文件或目录,避免把真实的文件/目录也重写了 RewriteRule ^([^/]+)/([^/]+)$ $1.php?as=$2 [L,QSA]:把URL里的第一部分(比如members)作为PHP文件名,第二部分(比如那个哈希值)作为as参数,内部重写到对应的PHP文件;L表示这是最后一条规则,QSA表示保留其他可能的GET参数(如果有的话)- 第二条规则是做301永久重定向,把旧的
members.php?as=xxxx跳转到members/xxxx,R=301告诉浏览器和搜索引擎这是永久跳转,后面的?会去掉原URL里的查询字符串
测试注意事项
- 写完规则后,清空浏览器缓存再测试,因为301重定向会被浏览器缓存
- 如果本地测试用的是XAMPP/WAMP,记得重启Apache服务让配置生效
- 如果遇到404错误,先检查mod_rewrite是否开启,以及AllowOverride是否设置正确
内容的提问来源于stack exchange,提问作者Ariel Divine Torreon
相关产品推荐
相关产品推荐

