You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.htaccess中移除PHP扩展名并实现URL路径转查询参数

解决方案

在现有.htaccess配置中添加以下两条规则,即可实现需求:

新增规则说明

1. 外部重定向(将带参数的旧URL转为友好URL)

这条规则负责把 https://mywebsite.it/room?id=1 这类URL外部重定向到 https://mywebsite.it/room/1,避免用户访问旧格式URL:

# 外部重定向:将 room?id=1 转为 room/1
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} ^id=(\d+)$ [NC]
RewriteRule ^room/?$ /room/%1 [R=302,L,NE]
  • %{REQUEST_METHOD} !POST:排除POST请求,防止表单提交时触发重定向
  • ^id=(\d+)$:匹配仅包含id=数字的查询字符串
  • R=302:临时重定向,上线稳定后可改为R=301永久重定向(注意301会被浏览器缓存)
  • NE:避免URL中特殊字符被不必要编码

2. 内部重写(将友好URL映射回原逻辑)

这条规则负责把 https://mywebsite.it/room/1 内部映射到 room?id=1,让PHP代码能通过$_GET['id']获取参数:

# 内部重写:将 room/1 转为 room?id=1
RewriteRule ^room/(\d+)/?$ /room?id=$1 [L]
  • ^room/(\d+)/?$:匹配room/数字或room/数字/(末尾斜杠可选)
  • L:执行完这条规则后停止后续规则,避免冲突

完整.htaccess配置

将新增规则按顺序插入原配置中,最终完整代码如下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# 外部重定向:将 room?id=1 转为 room/1
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} ^id=(\d+)$ [NC]
RewriteRule ^room/?$ /room/%1 [R=302,L,NE]

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L,NE]

# 内部重写:将 room/1 转为 room?id=1
RewriteRule ^room/(\d+)/?$ /room?id=$1 [L]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]

内容的提问来源于stack exchange,提问作者g-pane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:32:09