如何将PHP带参数动态URL转为路径格式的Smart URL友好链接
解决方案
你需要在原有移除.php后缀的规则基础上,新增针对profile路径参数的重写规则,完整的.htaccess配置如下:
RewriteEngine On # 处理profile路径的参数映射 RewriteRule ^profile/([0-9a-zA-Z_-]+)$ profile.php?id=$1 [QSA,L] # 原有移除.php后缀的规则 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
规则说明
- 第一条新增的
RewriteRule会匹配所有domain.com/profile/xxx格式的请求,其中([0-9a-zA-Z_-]+)是正则捕获组,可匹配由数字、大小写字母、下划线、横杠组成的profile_id,会将请求内部转发到profile.php?id=捕获到的id QSA标志会保留原请求附带的其他查询参数,比如访问domain.com/profile/123?from=home时,转发后会变成profile.php?id=123&from=homeL标志表示匹配到这条规则后就停止后续匹配,避免和后面的移除.php规则冲突
额外可选配置(旧链接自动跳转场景)
如果你希望用户访问旧的domain.com/profile.php?id=xxx链接时自动跳转到新的路径格式,可以在RewriteEngine On后面再加两条规则:
# 旧链接自动301跳转到新路径格式 RewriteCond %{THE_REQUEST} /profile\.php\?id=([0-9a-zA-Z_-]+) [NC] RewriteRule ^ /profile/%1? [L,R=301]
这部分规则会触发301永久重定向,同时自动去掉原链接的?id参数,可避免搜索引擎收录重复内容。
内容的提问来源于stack exchange,提问作者Mahbub Rashid Tonoy
相关产品推荐
相关产品推荐

