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

如何用.htaccess重写URL并保留原有GET参数?

实现URL重写的解决方案

没问题,这其实是个很常见的URL重写需求,用Apache的mod_rewrite模块就能轻松搞定。

首先要确保两个前提:你的Apache服务器已经启用了mod_rewrite模块,并且网站根目录的服务器配置允许使用.htaccess文件(一般需要在主配置里设置AllowOverride All)。

接下来,在网站根目录创建或编辑.htaccess文件,添加以下规则:

RewriteEngine On

# 将 /watch?v=xxx 重写为 /index.php?v=xxx
RewriteCond %{QUERY_STRING} ^v=([0-9]+)$
RewriteRule ^watch$ index.php [L,QSA]

规则解释:

  • RewriteEngine On:开启URL重写引擎,这是所有重写规则的基础,必须放在最前面。
  • RewriteCond %{QUERY_STRING} ^v=([0-9]+)$:这条条件用来匹配请求的查询字符串,确保是v=数字的格式。如果你的参数值可能包含字母、下划线等其他字符,可以把[0-9]+改成[^&]+,这样就能匹配任意非&的字符了。
  • RewriteRule ^watch$ index.php [L,QSA]:
    • ^watch$:精确匹配请求的URL路径为/watch,不会匹配/watch/abc这类带后缀的路径。
    • index.php:指定重写后的目标文件路径。
    • [L,QSA]:L标记表示这是最后一条规则,匹配成功后就不再处理后续规则;QSA(Query String Append)是关键,它会自动把原有的查询字符串(也就是v=123456789)附加到目标URL后面,不用我们手动拼接。

额外说明:
如果用户访问的URL可能带斜杠(比如/watch/?v=123456789),可以把RewriteRule改成下面这样,这样不管有没有斜杠都能匹配到:

RewriteRule ^watch/?$ index.php [L,QSA]

测试的时候直接访问http://example.com/watch?v=123456789,服务器会在内部转发到index.php?v=123456789,而浏览器地址栏不会显示变化(这是内部重写,完全符合你的需求)。

内容的提问来源于stack exchange,提问作者Sukhchain Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:40