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

如何用.htaccess移除PHP扩展名并保留GET参数?PHP MVC场景

解决URL重写:将example.com/search.php?key=abc改为example.com/search?key=abc

嘿,我来帮你搞定这个URL美化的需求!结合你现有的PHP MVC架构,我们需要调整.htaccess的规则,分两步走:先把旧的带.php的URL做301重定向(SEO友好,避免重复内容),再让新的干净URL内部转发到对应的search.php文件,同时不影响你现有的MVC路由规则。

完整的.htaccess配置

把下面的代码替换你当前的.htaccess内容即可:

Options -Multiviews
RewriteEngine On

# 1. 重定向旧URL:example.com/search.php?key=abc → example.com/search?key=abc
RewriteCond %{THE_REQUEST} ^GET\ /search\.php\?key=([^\s&]+) [NC]
RewriteRule ^search\.php$ /search?key=%1 [L,R=301]

# 2. 内部转发新URL:example.com/search?key=abc → search.php(保留查询参数)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^search$ search.php [L,QSA]

# 3. 保留你原有的MVC通用路由规则
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L]

各规则的作用说明

  • 第一步的重定向规则:

    • RewriteCond %{THE_REQUEST} 用来匹配真实的HTTP请求(比如GET /search.php?key=abc HTTP/1.1),确保只重定向用户实际访问的旧URL,不会干扰内部转发逻辑。
    • R=301 是永久重定向,告诉搜索引擎该URL已永久迁移,有助于维护SEO权重。
  • 第二步的内部转发规则:

    • ^search$ 精确匹配/search路径(不会匹配/search/xxx这类子路径,避免和你的MVC路由冲突)。
    • QSA(Query String Append)参数会自动把原URL的查询参数(比如?key=abc)附加到目标URL后,不用手动处理参数传递。
  • 第三步的原有MVC规则:

    • 保持原有逻辑不变,处理所有非文件、非目录的请求,转发到index.php进行MVC解析,完全不影响你后续的控制器与方法调用。

注意事项

  • 确保你的服务器已开启mod_rewrite模块(主流主机默认都已开启,若未开启可联系主机商或修改Apache配置启用)。
  • 测试前建议清空浏览器缓存,因为301重定向会被浏览器缓存,可能导致旧规则残留。

内容的提问来源于stack exchange,提问作者Isa Mtd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:42