如何通过.htaccess将URL中的GET参数替换为路径形式?
实现URL路径化替代GET参数的.htaccess配置
以下是修改后的完整.htaccess代码,既保留移除.php扩展名的功能,又能将attractions?id=897236234234这类带GET参数的URL转换为attractions/32456789的路径形式:
RewriteEngine On # 1. 重定向旧的带?id参数的URL到路径形式 RewriteCond %{THE_REQUEST} /attractions\.php\?id=(\d+) [NC] RewriteRule ^ /attractions/%1 [R=307,L] # 2. 移除.php扩展名的外部重定向 RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteRule (.*) /%1 [R=307,L] # 3. 处理路径形式的请求,转发到对应PHP文件并传递id参数 RewriteRule ^attractions/(\d+)$ attractions.php?id=$1 [L] # 4. 内部转发无扩展名的请求到对应PHP文件 RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [L] ErrorDocument 404 /error.php
规则说明
- 规则1:匹配用户访问的
attractions.php?id=xxx或已移除扩展名的attractions?id=xxx,通过307重定向到attractions/xxx,保证URL统一且避免重复内容。 - 规则2:保留你原有的移除.php扩展名逻辑,处理其他不带参数的PHP页面。
- 规则3:将
attractions/xxx这种路径形式的请求,内部转发到attractions.php?id=xxx,后台正常处理参数,前端URL保持整洁。 - 规则4:保留原有的无扩展名请求到PHP文件的转发逻辑,适配普通页面访问。
如果需要适配更多类似页面(比如events?id=xxx转events/xxx),复制规则1和规则3,替换attractions为对应页面名称即可。
内容的提问来源于stack exchange,提问作者joisberg
相关产品推荐
相关产品推荐

