编写.htaccess RewriteRule实现viewprofile.php伪静态不干扰index.php
解决viewprofile.php的URL重写问题
没问题,我来帮你搞定这个URL美化的需求!要实现www.example.com/viewprofile/JHFSD667映射到viewprofile.php?id=JHFSD667,同时不影响同目录下的index.php,你可以用下面这套.htaccess配置,我会逐行给你解释:
# 开启URL重写引擎 RewriteEngine On # 重写基准设置(如果你的文件在网站根目录,这行可以保留;子目录的话改成对应路径,比如/subdir/) RewriteBase / # 规则1:如果请求的是实际存在的文件,直接访问,不执行重写(这样index.php会正常生效) RewriteCond %{REQUEST_FILENAME} !-f # 规则2:如果请求的是实际存在的目录,直接访问,不执行重写 RewriteCond %{REQUEST_FILENAME} !-d # 核心重写规则:匹配viewprofile/后面的参数(这里支持字母+数字,有特殊字符可以调整正则) # 将匹配到的内容作为id参数传给viewprofile.php,[L]表示这是最后一条规则,[QSA]保留额外的查询参数 RewriteRule ^viewprofile/([A-Za-z0-9]+)$ viewprofile.php?id=$1 [L,QSA]
关键细节说明:
- 排除实际文件/目录:那两条
RewriteCond是核心,它会让服务器优先处理真实存在的文件(比如你的index.php),只有当请求的路径不是真实文件或目录时,才会触发重写规则,完美避免干扰。 - 正则匹配范围:
([A-Za-z0-9]+)只匹配字母和数字,如果你的用户ID包含下划线、短横线等特殊字符,可以改成([A-Za-z0-9_-]+)来兼容。 - QSA标记:如果用户访问
www.example.com/viewprofile/JHFSD667?foo=bar,QSA会保留foo=bar这个额外参数,传给viewprofile.php?id=JHFSD667&foo=bar,实用性拉满。
前置检查:
确保你的Apache服务器已经开启了mod_rewrite模块,同时网站根目录的虚拟主机配置里设置了AllowOverride All,否则.htaccess的规则不会生效哦。
内容的提问来源于stack exchange,提问作者RJMB
相关产品推荐
相关产品推荐

