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

如何通过Rewrite移除URL中间位置的.php扩展名?

移除URL中间位置的.php扩展名解决方案

好的,针对你提到的移除URL中间.php扩展名的需求(比如把https://example.com/file.php/a/b/b转为https://example.com/file/a/b/b),我来给你详细说明Apache mod_rewrite的实现方法,同时和你已有的末尾扩展名规则结合起来。

核心规则写法

你需要添加一条专门匹配中间位置.php的Rewrite规则,放在你现有规则的前面,确保优先处理中间的情况:

RewriteEngine On

# 处理中间位置的.php(后面跟着子路径)
RewriteRule ^(.*)\.php(/.*)$ $1$2 [R=301,L]

# 处理末尾的.php(你已有的规则)
RewriteRule ^(.*)\.php/?$ $1 [R=301,L]

规则解释

  • 第一条规则^(.*)\.php(/.*)$:

    • ^(.*):捕获.php前面的所有URL路径内容(比如例子中的file)
    • \.php:精确匹配.php字符串(转义.是因为它在正则里是通配符)
    • (/.*):捕获.php后面跟着的所有子路径内容(比如例子中的/a/b/b)
    • 替换为$1$2就是把.php去掉,拼接前后两部分内容,实现URL重定向。
  • 第二条是你已经在使用的规则,负责处理.php在URL末尾的情况(比如file.php转为file)。

注意事项

  1. 规则顺序:一定要把处理中间.php的规则放在前面,避免末尾规则提前匹配到部分内容导致中间的情况无法被正确处理。
  2. 测试用临时重定向:建议先把R=301改成R=302进行测试,确认所有URL都能正确跳转后再改回301(永久重定向),避免浏览器缓存错误的重定向规则。
  3. 确保mod_rewrite开启:你的Apache服务器需要启用mod_rewrite模块,同时.htaccess文件要有足够的权限(设置AllowOverride All)。

示例效果

  • 输入:https://example.com/file.php/a/b/b → 输出:https://example.com/file/a/b/b
  • 输入:https://example.com/post.php/category/tech → 输出:https://example.com/post/category/tech
  • 输入:https://example.com/about.php → 输出:https://example.com/about(由你原有的规则处理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:30:59